C++ STL之unordered

it2025-09-22  6

unordered_set和unorder_map很类似,内部都是无序的! unordered_set是一种无序集合,其底层实现基于hashtable,因此具有快速的查找和删除,添加的优点,因此在需要多次查找和删除的场景里可以用unordered_set来存储数据! 定义unordered_set

unordered_set<int> u_set;

基本操作

//判断是否为空 u_set.empty(); //获取元素个数 size() u_set.size(); //获取最大存储量 max_size() u_set.max_size(); //返回头迭代器 begin() unordered_set<int>::iterator ite_begin = c1.begin(); //返回尾迭代器 end() unordered_set<int>::iterator ite_end = c1.end(); unordered_set<int> set1; set1.find(2); //查找2,找到返回迭代器,失败返回end() set1.count(2); //返回指2出现的次数,0或1 set1.emplace(3); //使用转换移动构造函数,返回pair<unordered_set<int>::iterator, bool> set1.insert(3); //插入元素,返回pair<unordered_set<int>::iterator, bool> set1.insert({1,2,3}); //使用initializer_list插入元素 set1.insert(set1.end(), 4);//指定插入位置,如果位置正确会减少插入时间,返回指向插入元素的迭代器 set1.insert(set2.begin(), set2.end());//使用范围迭代器插入 set1.erase(1); //删除操作,成功返回1,失败返回0 set1.erase(set1.find(1)); //删除操作,成功返回下一个pair的迭代器 set1.erase(set1.begin(), set1.end()); //删除set1的所有元素,返回指向end的迭代器 set1.empty(); //是否为空 set1.size(); //大小 set1.bucket_count(); //返回容器中的桶数 set1.bucket_size(1); //返回1号桶中的元素数 set1.bucket(1); //1在哪一个桶 set1.load_factor(); //负载因子,返回每个桶元素的平均数,即size/float(bucket_count); set1.max_load_factor();//返回最大负载因子 set1.max_load_factor(2);//设置最大负载因子为2,rehash(0)表示强制rehash set1.rehash(20);//设置桶的数量为20,并且重新rehash set1.reserve(20);//将容器中的桶数设置为最适合元素个数,如果20大于当前的bucket_count乘max_load_factor,则增加容器的bucket_count并强制重新哈希。如果20小于该值,则该功能可能无效。 unordered_set<int>::iterator it = set1.begin(); //返回指向set1首元素的迭代器 unordered_set<int>::const_iterator c_it = set1.cbegin(); //返回指向set1首元素的常量迭代器 unordered_set<int>::local_iterator it = set1.begin(1);//返回1号桶中的首元素迭代器 unordered_set<int>::const_local_iterator c_it = set1.cbegin(1);//返回1号桶中的首元素的常量迭代器 pair<unordered_set<int>::iterator, unordered_set<int>::iterator> it = set1.equal_range(1);//返回一个pair,pair里面第一个变量是lower_bound返回的迭代器,第二个迭代器是upper_bound返回的迭代器 set1.clear(); //清空

遍历

#include<unordered_set> #include<iostream> using namespace std; int main(){ unordered_set<int> set = {9,5,9,8,1,2,3,5,6,1,2,3,4,5,6,7,4,3,3}; for(unordered_set<int>::iterator it = set.begin();it!=set.end();it++) cout<<*it<<" "; return 0; }

输出结果:

7 4 6 3 2 1 8 5 9

因此unordered_set遍历输出的是原序列的无序无重复形式!可以用unordered_set来去重!

最新回复(0)