unordered_set(c++)

unordered_set(c++)
寻觅~流光unordered_set(c++)
unordered_set 是 C++ 标准库中的一个容器,属于 std 命名空间,和 set 类似,但与 set 不同的是,unordered_set 中的元素没有任何排序。unordered_set 的底层实现基于哈希表,因此它能够提供常数时间复杂度的插入、删除和查找操作(在最坏情况下为线性时间复杂度)。不过,由于没有排序,元素的遍历顺序是无序的。
1. insert()
insert() 用于向 unordered_set 中插入一个元素。如果元素已经存在,insert() 不会插入新元素,并且返回一个指示插入结果的对(iterator, bool)。如果插入成功,返回的布尔值为 true;如果元素已经存在,返回 false。
1 | std::unordered_set<int> mySet; |
2. erase()
erase() 用于删除 unordered_set 中的元素。它可以接受元素值或迭代器作为参数。
- 通过元素值删除:删除指定的元素。
- 通过迭代器删除:删除指定位置的元素。
1 | std::unordered_set<int> mySet = {10, 20, 30}; |
3. find()
find() 用于查找 unordered_set 中是否包含某个元素。返回一个指向该元素的迭代器,如果找不到则返回 unordered_set::end()。
1 | std::unordered_set<int> mySet = {10, 20, 30}; |
4. count()
count() 返回指定元素在 unordered_set 中的出现次数。由于 unordered_set 中的元素是唯一的,因此返回值只能是 0 或 1。
1 | std::unordered_set<int> mySet = {10, 20, 30}; |
5. empty()
empty() 用于检查 unordered_set 是否为空。如果为空,返回 true;否则返回 false。
1 | std::unordered_set<int> mySet; |
6. size()
size() 返回 unordered_set 中的元素个数。
1 | std::unordered_set<int> mySet = {10, 20, 30}; |
7. clear()
clear() 清空 unordered_set 中的所有元素。
1 | std::unordered_set<int> mySet = {10, 20, 30}; |
8. bucket_count()
bucket_count() 返回 unordered_set 中哈希表的桶数。
1 | std::unordered_set<int> mySet = {10, 20, 30}; |
9. bucket_size()
bucket_size() 返回指定桶中元素的数量。哈希表将元素分配到不同的桶中,bucket_size() 用于查看某个特定桶中有多少个元素。
1 | std::unordered_set<int> mySet = {10, 20, 30}; |
10. rehash()
rehash() 用于调整 unordered_set 内部哈希表的桶数量。此方法在元素数量增长时很有用,它通过增加桶的数量来减少哈希冲突,提高性能。
1 | std::unordered_set<int> mySet = {10, 20, 30}; |
11. load_factor()
load_factor() 返回当前哈希表的负载因子,即元素数量与桶数量的比率。负载因子越大,哈希冲突的概率越高。
1 | std::unordered_set<int> mySet = {10, 20, 30}; |
12. begin() 和 end()
begin()返回指向unordered_set中第一个元素的迭代器。end()返回指向unordered_set末尾元素的迭代器,指向的是一个虚拟元素,比最后一个元素的后一个位置。
1 | std::unordered_set<int> mySet = {10, 20, 30}; |
13. reserve()
reserve() 用于预留空间,以减少动态扩展哈希表时的性能损失。通过提前为容器分配足够的空间,避免在插入元素时多次重新哈希。
1 | std::unordered_set<int> mySet; |
14. swap()
swap() 用于交换两个 unordered_set 容器的内容。
1 | std::unordered_set<int> set1 = {10, 20, 30}; |
总结
unordered_set 与 set 相比,提供了更高效的插入、删除和查找操作(在平均情况下为常数时间复杂度),但是由于它不保持元素的顺序,无法按排序顺序遍历。它非常适合用于存储不需要排序的唯一元素集合,特别是在涉及大量查找操作时,性能表现优异。








