C++ STL set学习笔记
介绍:
set,集合,即在set中的元素都是唯一的,并且默认自动升序排列,因此常用于去重操作。set 的底层使用的是红黑树,插入删除操作时仅仅需要指针操作节点即可完成,不涉及内存的移动和拷贝,效率比较高。set中的元素根据其值的大小在红黑树中有特定的位置,是不可移动,所以查找操作效率会很高(log N)并且 set 中元素的值不可改变。set不会重复插入相同的元素,采用忽略处理,如果需要集合中的元素允许重复,那么可以使用 multiset 。
用法:
1.头文件
#include<set>
2.定义方式
set<int>set_1; set<string>set_2; set<node>set_3;
set<type>::iterator it; //定义 type 类型的迭代器
3.常用函数总结
- S.insert(date); //插入数据 date
- S.erase(date); //删除数据 date
- S.find(date); //如果存在,返回 date 的迭代器,如果 date 不存在,返回 S.end();
- S.begin(); //开始指针
- S.end(); //末尾指针+1
- S.empty(); //判断 set 是否为空
- S.clear(); //清空 set 里的所有元素
- S.size(); //返回 set 中的元素个数
4.自定义比较函数
#include<iostream> #include<set> using namespace std; struct node { int a,b; bool operator < (const node &temp) const //重载“<"操作符,自定义排序规则 { if(a<temp.a||(temp.a==a&&b<temp.b)) return 1; return 0; } }; int main() { node temp; set<node>S; int n; cin>>n; for(int i=0;i<n;++i) { cin>>temp.a>>temp.b; S.insert(temp); } set<node>::iterator it; for(it=S.begin();it!=S.end();++it) { cout<<it->a<<" "<<it->b<<endl; } return 0; }