1. 区别和用法
set 和 unordered_set 都是是不重复的集合。set 的底层通过树实现,且会自动为集合内元素按由小到大排序。unordered_set 的底层通过哈希表实现,并不会自动排序。当创建一个不需要排序的集合时应使用 unordered_set,因为哈希表对元素的查找更快。
结论:需要排序的集合用 set,不需要排序的集合用unordered_set。
2. set 常用操作
#include <set> //set头文件
int x;
set<int> s; //初始化一个名为s的set,默认升序排列
set<int,greater<int>> s; //初始化一个名为s的set,降序排列
(x); //在set中插入x
(x); //删除set中的x元素,返回0表示set中不存在x,1表示删除成功
(); //清空set
(); //判断set是否为空,若是返回1,否则返回0
(); //返回set中元素的个数
(x); //返回x的迭代器,若x不存在,则返回指向set的尾迭代器
(x); //返回x出现的次数,0或1
set.lower_bound(x); //返回一个迭代器,指向第一个键值大于等于x的元素
set.upper_bound(x); //返回一个迭代器,指向第一个键值大于x的元素
(); //返回指向q中第一个元素的迭代器
(); //返回指向q最后一个元素下一个位置的迭代器(尾迭代器)
3. unorder_set 常用操作
#include <unordered_set> //unordered_set头文件
int x;
unordered_set<int> s1; //初始化一个名为s的set
unordered_set.insert(x); //在set中插入x
unordered_set.erase(x); //删除set中的x元素,返回0表示set中不存在x,1表示删除成功
unordered_set.clear(); //清空set
unordered_set.empty(); //判断set是否为空,若是返回1,否则返回0
unordered_set.size(); //返回set中元素的个数
unordered_set.find(x); //返回x的迭代器,若x不存在,则返回指向set的尾迭代器
unordered_set.count(x); //返回x出现的次数,0或1
unordered_set.begin(); //返回指向q中第一个元素的迭代器
unordered_set.end(); //返回指向q最后一个元素下一个位置的迭代器(尾迭代器)