本专栏内容为:C++学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C++。
💓博主csdn个人主页:小小unicorn
⏩专栏分类:C++
🚚代码仓库:小小unicorn的代码仓库🚚
🌹🌹🌹关注我带你学习编程知识
目录
unordered系列关联式容器
在C++98
中,STL
提供了底层为红黑树结构的一系列关联式容器,在查询时的效率可达到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.erase(pos);