C++基础知识4:unordered_set
本文目的
简单的介绍一下unordered在不同地方使用的作用,在全局,在函数,在类里面的使用,以及相关应用举例
前置与关联知识点
- 哈希表
- 容器
unordered_set简介
C++11之后新增的无序容器
参考《Primer C++》11.4无序容器 p394
关键字类型没有明显顺序关系的时候,使用无序容器是非常有用的
unordered_set属于无序关联容器
unordered_set实现原理
参考《Primer C++》11.4无序容器 p394
使用了一个哈希函数和关键字类型的==运算符来进行元素的比较,这里不详细说解法
unordered_set使用方式
同关联容器的使用方式
参考《Primer C++》11.3关联容器操作 p381
unordered_set查找元素
- count,查找元素是否存在
unordered_set<int> uset = {0,1,2,3,4}; cout<<uset.count(1); //返回1 cout<<uset.count(11); //返回0
- find返回元素迭代器,如元素不存在则返回uset.end()
unordered_set<int> uset = {0,1,2,3,4}; cout<<uset.find(1); //返回1对应的迭代器 cout<<uset.count(11); //返回uset.end()
unordered_set添加和删除元素
- 添加元素
ps:插入一个已存在的元素对容器没有任何影响unordered_set<int> uset; uset.insert(1);//插入单个元素 uset.insert({1,2,3,4,5,6,1});//插入多个元素
- 删除一个已有的元素
unordered_set<int> uset; uset.insert({1,2,3,4,5,6,2});//插入多个元素 uset.count(2); //返回1 uset.erase(2); //删除元素 uset.count(2); //返回0
遍历unordered_set
参考chatgpt
- 第一种方式:通过获取迭代器,迭代器自增的方式进行
#include <iostream>
#include <unordered_set>
int main() {
// 创建一个unordered_set
std::unordered_set<int> mySet = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
// 遍历unordered_set
for (auto it = mySet.begin(); it != mySet.end(); ++it) {
std::cout << *it << " ";
}
return 0;
}
- 第二种方式:通过获取迭代器,迭代器自增的方式进行
#include <iostream>
#include <unordered_set>
int main() {
// 创建一个unordered_set
std::unordered_set<int> mySet = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
// 遍历unordered_set
// 或者使用范围循环(C++11及以后版本)
for (const auto &element : mySet) {
std::cout << element << " ";
}
return 0;
}
5. 其他
如有则补充
参考文献
《Primer C++》11.3关联容器操作 p381
《Primer C++》11.4无序容器 p394
chatgpt生成部分代码