c++unordered_set(c++unordered_set用法)

简介

`unordered_set` 是 C++ 标准库中一种高效的无序集合容器,它存储唯一元素。与 `set` 容器不同,`unordered_set` 使用哈希表来组织其元素,这使得查找、插入和删除操作具有接近常数的时间复杂度。

哈希表

哈希表是键值对集合,其中键是用于查找值的唯一标识符。在 `unordered_set` 中,元素用作键,而值始终为布尔值 `true`。通过将元素转换为哈希值并在哈希表中查找该哈希值,可以快速查找元素。

多级标题

###

优点

快速查找、插入和删除:

O(1) 平均时间复杂度(在没有哈希冲突的情况下)。

唯一性:

`unordered_set` 仅存储唯一元素,因此不会出现重复。

高效的内存使用:

它仅存储元素和布尔值,不需要额外的信息来维护顺序。###

缺点

无序:

`unordered_set` 中的元素没有特定的顺序。

哈希冲突:

当多个元素哈希到同一个哈希桶时,可能会发生冲突,从而降低性能。

没有迭代器稳定性:

在插入新元素或删除现有元素后,迭代器的有效性不受保证。

内容详细说明

####

构造和初始化

`unordered_set`:构造一个空的 `unordered_set`。

`unordered_set(initializer_list)`:使用初始化列表构造。

`unordered_set(const unordered_set& other)`:使用其他 `unordered_set` 构造。####

元素操作

`insert(const T& value)`:插入一个元素。如果元素已经存在,则不执行任何操作。

`erase(const T& value)`:删除一个元素。

`find(const T& value)`:返回一个指向匹配元素的迭代器,如果没有找到,则返回 `end()`。

`count(const T& value)`:返回容器中与给定元素匹配的元素数量。####

其他操作

`size()`:返回容器中元素的数量。

`empty()`:检查容器是否为空。

`clear()`:清除容器中的所有元素。

`swap(unordered_set& other)`:交换两个 `unordered_set` 的内容。####

哈希函数和比较器

`unordered_set` 使用哈希函数和比较器来确定元素的哈希值和比较元素的相等性。默认情况下,它使用 `std::hash` 和 `std::equal_to` 函数。但是,可以通过在构造函数中提供自定义哈希函数和比较器来覆盖这些默认值。####

示例

```cpp #include int main() {// 创建一个空的unordered_setunordered_set mySet;// 插入一些元素mySet.insert(1);mySet.insert(3);mySet.insert(5);// 查找元素auto it = mySet.find(3);if (it != mySet.end()) {cout << "元素3已找到" << endl;}// 删除元素mySet.erase(1);// 遍历元素for (int i : mySet) {cout << i << " ";}return 0; } ```

标签列表