文章目录
unordered系列关联式容器
在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时的效率可达到 O ( l o g N ) O(logN) O(logN),即最差情况下需要比较红黑树的高度次,当树中的结点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11中,STL又提供了4个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同。
unordered_set的介绍
- unordered_set是不按特定顺序存储键值的关联式容器,其允许通过键值快速的索引到对应的元素。
- 在unordered_set中,元素的值同时也是唯一地标识它的key。
- 在内部,unordered_set中的元素没有按照任何特定的顺序排序,为了能在常数范围内找到指定的key,unordered_set将相同哈希值的键值放在相同的桶中。
- unordered_set容器通过key访问单个元素要比set快,但它通常在遍历元素子集的范围迭代方面效率较低。
- 它的迭代器至少是前向迭代器。
unordered_set的使用
unordered_set的定义方式
方式一: 构造一个某类型的空容器。
unordered_set<int> us1; //构造int类型的空容器
方式二: 拷贝构造某同类型容器的复制品。
unordered_set<int> us2(us1); //拷贝构造同类型容器us1的复制品
方式三: 使用迭代器拷贝构造某一段内容。
string str("abcedf");
unordered_set<char> us3(str.begin(), str.end()); //构造string对象某段区间的复制品
unordered_set接口的使用
unordered_set当中常用的成员函数如下:
| 成员函数 | 功能 |
|---|---|
| insert | 插入指定元素 |
| erase | 删除指定元素 |
| find | 查找指定元素 |
| size | 获取容器中元素的个数 |
| empty | 判断容器是否为空 |
| clear | 清空容器 |
| swap | 交换两个容器中的数据 |
| count | 获取容器中指定元素值的元素个数 |
unordered_set当中迭代器相关函数如下:
| 成员函数 | 功能 |
|---|---|
| begin | 获取容器中第一个元素的正向迭代器 |
| end | 获取容器中最后一个元素下一个位置的正向迭代器 |
使用示例:
#include <iostream>
#include <unordered_set>
using namespace std;
int main()
{
unordered_set<int> us;
//插入元素(去重)
us.insert(1);
us.insert(4);
us.insert(3);
us.insert(3);
us.insert(2);
us.insert(2);
us.insert(3);
//遍历容器方式一(范围for)
for (auto e : us)
{
cout << e << " ";
}
cout << endl; //1 4 3 2
//删除元素方式一
us.erase(3);
//删除元素方式二
unordered_set<int>::iterator pos = us.find(1); //查找值为1的元素
if (pos != us.end())
{
us.

本文详细介绍了C++11中引入的unordered系列关联式容器,包括unordered_set和unordered_map。unordered_set是一个无序存储键值的集合,允许快速索引,而unordered_map则存储键值对,提供快速访问。两者都基于哈希表,提供高效查找,但遍历效率较低。unordered_set和unordered_map支持插入、删除、查找等操作,并可通过迭代器遍历。unordered_multiset和unordered_multimap允许键值冗余,提供类似但允许重复的功能。
最低0.47元/天 解锁文章
1807

被折叠的 条评论
为什么被折叠?



