set的用法
set是STL 中一种标准关联容器。它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。
set,顾名思义是 “集合” 的意思,在 set 中元素都是唯一的,而且默认情况下会对元素自动进行升序排列,支持集合的交 (set_intersection), 差 (set_difference) 并 (set_union),对称差 (set_symmetric_difference) 等一些集合上的操作,如果需要集合中的元素允许重复那么可以使用 multiset
1.头文件:<set> 2.定义:set<int> q; 3.输入(插入):insert(x); 4.删除指定元素:erase(x); 5.清空:clear(); 6.判空:empty(); 7.大小:size(); 8.二分查找:q.lower_bound(x);
9.有序输出
set<int>::iterator it; for(it = q.begin();it != q.end();it++) { cout<<*it<<endl; }
set 模板原型
template <class Key, class Compare=less<Key>, class Alloc=STL_DEFAULT_ALLOCATOR(Key) > //Key为元素(键值)类型 greater是从升序排序(默认),可以改为less(降序排序)
set 容器的创建
#include <iostream> #include <set> #include <functional> using namespace std; set<int> s; int main() { set<int,greater<int> > seta; //greater<int>可以不写,默认是升序 set<int, less<int> > setb; //创建一个降序的set,需包含头文件functional int a[5] = {1,2,3,4,5}; set<int > setc(a,a+5); //数组a初始化一个set; set<int > setd(setc.begin(),setc.end()); //setc初始化一个set //上述两例均为区间初始化 set<int > sete(setd); //拷贝构造创建set return 0; } //注意写法set<int,less<int> >或set<int,greater<int> >,如果不空格,“>>”被当作位运算可能报错
set 容器的增删改查
1. 插入
#include <iostream> #include <set> using namespace std; set<int >s; void setprint(int cnt) { cout << "Test output :" << cnt << ":" << endl; for(set<int>::iterator it = s.begin(); it!= s.end(); it++) cout << *it << " "; puts(""); return ; } int main() { int cnt = 1; s.insert(1); s.insert(2); s.insert(5); setprint(cnt++); s.insert(2); //set只允许用一个值出现一次,要插入相同元素请用multiset setprint(cnt++); int a[4] = {11,12,13,14}; s.insert(a,a+4); //将区间[a, a+4]里的元素插入容器 setprint(cnt++); return 0; }