unordered_set 容器,可直译为“无序 set 容器”。即 unordered_set 容器和 set 容器很像,唯一的区别就在于 set 容器会自行对存储的数据进行排序,而 unordered_set 容器不会。
unordered_set的几个特性:
不再以键值对的形式存储数据,而是直接存储数据的值
容器内部存储的各个元素的值都互不相等,且不能被修改
不会对内部存储的数据进行排序
unordered_set<int> set1;
unordered_set<int> set2(set1);
unordered_set<int> set3(set1.begin(), set1.end());
unordered_set<int> set4(arr,arr+5);
unordered_set<int> set5(move(set2));
unordered_set<int> set6 {1,2,10,10};
//若容器为空,则返回 true;否则 false set1.empty();
//查找2,找到返回迭代器,失败返回end() set1.find(2);
//返回指2出现的次数,0或1 set1.count(2);
//插入元素,返回pair<unordered_set<int>::iterator, bool> set1.insert(3); //使用initializer_list插入元素 set1.insert({1,2,3}); //指定插入位置,如果位置正确会减少插入时间,返回指向插入元素的迭代器 set1.insert(set1.end(), 4); //使用范围迭代器插入 set1.insert(set2.begin(), set2.end());
//使用转移构造函数添加新元素3,比insert效率高 set1.emplace(3);
//删除操作,成功返回1,失败返回0 set1.erase(1); //删除操作,成功返回下一个pair的迭代器 set1.erase(set1.find(1)); //删除set1的所有元素,返回指向end的迭代器 set1.erase(set1.begin(), set1.end());
//返回容器中的篮子总数 set1.bucket_count();
//返回1号篮子中的元素数 set1.bucket_size(1);
//元素1在哪一个篮子 set1.bucket(1);
set1.clear();
//负载因子,返回每个篮子元素的平均数,即size/float(bucket_count); set1.load_factor();
//设置篮子的数量为20,并且重新rehash set1.rehash(20);
for(unordered_set<int>::iterator it = set1.begin(); it != set1.end(); ++it) cout << *it << " ";
for(int x : set1) cout << x << " ";