📝个人主页:@Sherry的成长之路
🏠学习社区:Sherry的成长之路(个人社区)
📖专栏链接:C++学习
🎯长路漫漫浩浩,万事皆有期待
上一篇博客:【C++】STL详解(五)—— list的介绍及使用
文章目录
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);
}
//遍历容器方式二(迭代器遍历)
unordered_set<int