set容器的定义:
set<type>s1;
set<type,cmp>s2;//cmp是比较方法运用结构体重载,priority_queue也有这种定义方法
struct cmp
{
bool operator()(const int& a,const int&b)
{
return a > b;//降序,与priority_queue相反
}
};
set容器的操作
set<type>s;
插入:insert(val);
//无尾插之类的操作
删除:s.erase(pos);
s.erase(s.begin(),s.end());//只能从头到尾删==清空,不能删指定区间 类似链表
清空:s.clean();
获取大小:s.size();
查找某一个数:s.find(val);//返回值是一个迭代器,查找的值不存在返回s.end()
查找第一个比val大的数:s.upper_bound(val);//返回值是一个迭代器,查找的值不存在返回s.end()
查找第一个大于等于val的数:s.lower_bound(val);//返回值是一个迭代器,查找的值不存在返回s.end(),注意有等于
交换两个set内容:swap(s1,s2);或者s1.swap(s2);//注意定义方式要相同才行
查找val在set里的个数:s.count(val);
判断s是否为空:s.empty();
得到计算机最多给set多大的空间:s.max_size();
实例:
for (int i = 1; i <= 10; i++)
{
s.insert(i);
}
s.erase(s.begin());
cout << s.size() << endl;
//s.erase(s.begin(), s.end()); 不能删除指定区间 只能全部清楚 类似链表
cout << *s.find(8) << endl;
cout<<*s.upper_bound(5)<<endl;
cout << *s.lower_bound(5) << endl;//大于等于 注意等于
set<int>s2;
swap(s, s2);
s.swap(s2);
cout << s.count(10) << endl;
s.clear();
if (s.empty())
{
cout << "empty" << endl;
}
else
{
cout << "not empty" << endl;
}
cout << s.max_size() << endl;
--------------
multiset<int>s,操作和set差不多,两者在于multiset定义的可以存在相同的值,而set会自动去重!
|