unordered_set和unordered_map的基本使用
🔒快速导航关联在一起的文章
🔒
文章名称 | 链接 |
---|---|
二叉搜索树 | 点击直达文章 |
set和map的基本使用 | 点击直达文章 |
AVL树 | 点击直达文章 |
红黑树 | 点击直达文章 |
unordered_set
在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到 ,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同。
unordered_set的介绍:
- unordered_set不是按特定顺序存储键值的容器,其允许通过键值快速的索引到与其对应的元素。
- unordered_set在内部,中的元素不是按任何特定顺序排序的,为了实现在常数范围内找到key,unorder_set把相同的哈希值放在哈希桶中。
- unordered_set元素的值同时也是唯一表示它们的key.
- unordered_set 容器比 set 容器更快地通过它们的键访问单个元素,尽管它们通常对于通过其元素的子集进行范围迭代的效率较低。
- 容器中的迭代器至少是前向迭代器。
unordered_set的使用
unordered_set的定义方式
常用的2种方式,库里还有几种,感兴趣的可以看看,链接在上面。
方式一
:构造某种类型的空容器
unordered_set<int> uns1;//构造1个空的int容器
方式二
:拷贝构造同类型的容器
unordered_set<int> uns2(uns1);//拷贝构造同类型的容器
unordered_set的常用接口
它的接口的使用跟set的接口使用是一样的。常用的接口如下:
成员函数 | 功能 |
---|---|
insert | 插入元素 |
erase | 删除元素 |
find | 查找指定元素 |
size | 获取容器中元素的个数 |
empty | 判断容器是否为空 |
clear | 清除数据 |
swap | 交换2个容器的数据 |
count | 获取容器中的有效元素的个数 |
unordered_set的迭代器
begin | 返回第一个元素的迭代器 |
---|---|
end | 返回最后一个元素下一个位置的迭代器 |
cbegin | 返回第一个元素的const迭代器 |
cend | 返回最后一个元素下一个位置的const迭代器 |
示例如下:
void Test_unordered_set1()
{
unordered_set<int> uns1;//构造1个空的int容器
//插入
uns1.insert(2);
uns1.insert(10);
uns1.insert(4);
uns1.insert(13);
uns1.insert(2);
uns1.insert(12);
//迭代器遍历
unordered_set<int>::iterator it = uns1.begin();
while (it != uns1.end())
{
cout << *it << " ";