头文件
#include < set >
简介
- 在set中每个元素的值都是唯一的。multiset是可重复集合
- 两者系统能够根据元素的值自动进行排序(从大到小)
- set用于判断一个集合内元素的有无
- 两者的内部实现是一棵红黑树,它们支持的函数基本相同
用法
1.定义及创建
set<int> a // 定义一 类型为int(可以改成其他的类型)
multiset<int> a // 定义一 类型为int(可以改成其他的类型)
// example
struct node{
......;
};
set<node>s;
bool operator <(const node &ai,const node &bi)
{
return ai.x>bi.x;
}
//迭代器
set<int>::iterator it;
multiset<int>::iterator it;
-
2.具体操作
- 语法 (适用于 set 和 multiset)
s.begin() 返回set容器的第一个元素
s.end() 返回set容器的最后一个元素
s.clear() 删除set容器中的所有的元素
s.empty() 判断set容器是否为空
s.max_size() 返回set容器可能包含的元素最大个数
s.size() 返回当前set容器中的元素个数
s.rbegin 返回的值和end()相同
s.rend() 返回的值和begin()相同
s.coust(x) 用来查找set中x出现的次数
s.find() 返回给定值值得定位器,如果没找到则返回end()
s.insert(x) 将x插入到set中
s.lower_bound(x) ,返回第一个大于等于x的定位器
s.upper_bound(x) ,返回最后一个大于等于x的定位器
s.erase(x) 删除x
例子
set<int> s; //定义set
multiset<int> ss //定义multiset
set<int>::iterator it; //定义一个set迭代器
multiset<int>::iterator itt; //定义一个multiset迭代器
s.insert(2);
s.insert(2);
s.insert(4);
s.insert(6);
s.insert(8);
s.insert(5);
ss.insert(2);
ss.insert(2);
ss.insert(4);
ss.insert(6);
ss.insert(8);
ss.insert(5);
for(it=s.begin(); it!=s.end(); it++) //输出迭代器的值 2 4 5 6 8
cout<<*it<<" ";
for(itt=ss.begin(); itt!=ss.end(); itt++) //输出迭代器的值 2 2 4 5 6 8
cout<<*itt<<" ";
cout<<s.size()<<endl; //输出元素个数 5
cout<<ss.size()<<endl; //输出元素个数 6
s.erase(2); //删除元素2
for(it=s.begin(); it!=s.end(); it++) //输出迭代器的值 4 5 6 8
cout<<*it<<" ";
ss.erase(2);
for(itt=ss.begin(); itt!=ss.end(); itt++) //输出迭代器的值 4 5 6 8
cout<<*itt<<" ";
it=s.find(4);
cout<<*it; //输出元素 4
it=s.find(3)
cout<<*it; //输出元素 s.end() 5 因为不存在3
// multiset 同样适用