c++unordered_set(c++unordered_set的数据结构)

[img]

简介:

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的定义格式为:

```

unordered_set<元素类型> unorderedSet对象名;

```

示例代码:

```

#include

#include

using namespace std;

int main() {

unordered_set unorderedSetObj;

return 0;

```

unordered_set对象可以使用以下方式进行初始化:

- 直接初始化:unordered_set unorderedSetObj{ 1, 2, 3 };

- 拷贝初始化:unordered_set unorderedSetObj2(unorderedSetObj1);

3. unordered_set的元素插入、删除和查找

unordered_set元素的插入、删除和查找操作使用insert()、erase()和find()函数实现。

insert()函数用于向unordered_set中插入元素,语法格式为:

```

unordered_set<元素类型>对象名.insert(元素值);

```

示例代码:

```

#include

#include

using namespace std;

int main() {

unordered_set unorderedSetObj;

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{ 1, 2, 3 };

unorderedSetObj.erase(2);

return 0;

```

find()函数用于查找unordered_set中的元素,语法格式为:

```

unordered_set<元素类型>::iterator iter = 对象名.find(元素值);

```

示例代码:

```

#include

#include

using namespace std;

int main() {

unordered_set unorderedSetObj{ 1, 2, 3 };

unordered_set::iterator iter = unorderedSetObj.find(2);

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 unorderedSetObj{ 1, 2, 3 };

// 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, " "));

cout << endl;

// 使用ostream_iterator将unordered_set中的元素输出至输出流中

copy(unorderedSetObj.begin(), unorderedSetObj.end(), ostream_iterator(cout, "\n"));

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 unorderedSetObj{ 1, 2, 3 };

// 判断元素是否存在

unordered_set::iterator iter = unorderedSetObj.find(2);

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 uniqueSet(arr, arr + sizeof(arr) / sizeof(arr[0]));

for (auto i : uniqueSet) {

cout << i << " ";

}

cout << endl;

return 0;

```

以上就是关于C++ STL中unordered_set的详细介绍。unordered_set是C++程序员必须熟练掌握的STL组件之一,它可以提高程序的效率和可重用性,帮助程序员轻松地完成各种数据结构和算法的设计和实现。

标签列表