c++unordered_set(c++unordered_set的数据结构)
简介:
C++ STL(标准模板库)是C++程序员必须学习的知识之一。STL提供了一系列的容器(container)、算法(algorithm)和迭代器(iterator)等组件,以提高C++程序的可维护性和可重用性。本文将介绍STL中最常用的一个容器——unordered_set。
多级标题:
1. unordered_set概述
2. unordered_set的定义和初始化
3. unordered_set的元素插入、删除和查找
4. unordered_set的遍历和输出
5. unordered_set的几种常见用法
内容详细说明:
1. unordered_set概述
unordered_set是一种哈希表实现的容器。哈希表是一种基于键(key)直接访问的数据结构,它通过把键映射到表中一个位置来记录和查找记录。unordered_set允许保存不重复(unique)的元素,并提供常数级(O(1))的插入、删除和查找操作。
2. unordered_set的定义和初始化
unordered_set的定义需要包含头文件
```
unordered_set<元素类型> unorderedSet对象名;
```
示例代码:
```
#include
#include
using namespace std;
int main() {
unordered_set
return 0;
```
unordered_set对象可以使用以下方式进行初始化:
- 直接初始化:unordered_set
- 拷贝初始化:unordered_set
3. unordered_set的元素插入、删除和查找
unordered_set元素的插入、删除和查找操作使用insert()、erase()和find()函数实现。
insert()函数用于向unordered_set中插入元素,语法格式为:
```
unordered_set<元素类型>对象名.insert(元素值);
```
示例代码:
```
#include
#include
using namespace std;
int main() {
unordered_set
unorderedSetObj.insert(1);
unorderedSetObj.insert(2);
unorderedSetObj.insert(3);
return 0;
```
erase()函数用于删除unordered_set中的元素,语法格式为:
```
unordered_set<元素类型>对象名.erase(元素值);
```
示例代码:
```
#include
#include
using namespace std;
int main() {
unordered_set
unorderedSetObj.erase(2);
return 0;
```
find()函数用于查找unordered_set中的元素,语法格式为:
```
unordered_set<元素类型>::iterator iter = 对象名.find(元素值);
```
示例代码:
```
#include
#include
using namespace std;
int main() {
unordered_set
unordered_set
if (iter == unorderedSetObj.end()) {
cout << "2 not found." << endl;
} else {
cout << "2 found." << endl;
}
return 0;
```
4. unordered_set的遍历和输出
unordered_set的元素可以使用迭代器(iterator)进行遍历。unordered_set的迭代器类型为unordered_set<元素类型>::iterator。可以使用auto关键字简化迭代器类型的定义。
unordered_set的元素可以使用以下方式进行输出:
- 使用for循环遍历输出所有元素。
- 使用迭代器遍历输出所有元素。
- 使用copy算法将unordered_set中的元素输出至ostream对象中。
- 使用ostream_iterator将unordered_set中的元素输出至输出流中。
示例代码:
```
#include
#include
#include
#include
using namespace std;
int main() {
unordered_set
// for循环遍历输出所有元素
for (int i : unorderedSetObj) {
cout << i << " ";
}
cout << endl;
// 迭代器遍历输出所有元素
for (auto iter = unorderedSetObj.begin(); iter != unorderedSetObj.end(); iter++) {
cout << *iter << " ";
}
cout << endl;
// 使用copy算法将unordered_set中的元素输出至ostream对象中
copy(unorderedSetObj.begin(), unorderedSetObj.end(), ostream_iterator
cout << endl;
// 使用ostream_iterator将unordered_set中的元素输出至输出流中
copy(unorderedSetObj.begin(), unorderedSetObj.end(), ostream_iterator
return 0;
```
5. unordered_set的几种常见用法
unordered_set在实际应用中具有广泛的用途。下面介绍几种unordered_set常见的用法。
- 判断元素是否存在:使用find()函数查找元素是否存在。
- 求元素个数:使用size()函数获取元素个数。
- 判断是否为空:使用empty()函数判断元素是否为空。
- 去除重复元素:使用unordered_set去除重复元素的方法很简单,只需将元素插入至unordered_set中即可。
示例代码:
```
#include
#include
using namespace std;
int main() {
unordered_set
// 判断元素是否存在
unordered_set
if (iter == unorderedSetObj.end()) {
cout << "2 not found." << endl;
} else {
cout << "2 found." << endl;
}
// 求元素个数
cout << "size: " << unorderedSetObj.size() << endl;
// 判断是否为空
cout << "empty: " << unorderedSetObj.empty() << endl;
// 去除重复元素
int arr[] = { 1, 2, 2, 3, 3, 3 };
unordered_set
for (auto i : uniqueSet) {
cout << i << " ";
}
cout << endl;
return 0;
```
以上就是关于C++ STL中unordered_set的详细介绍。unordered_set是C++程序员必须熟练掌握的STL组件之一,它可以提高程序的效率和可重用性,帮助程序员轻松地完成各种数据结构和算法的设计和实现。