STL之unordered_set 【无序不重复集合】

发布时间:2024年01月24日

unordered_set:无序集合,与 set 类似,但不进行排序,提供更快的查找操作。

一、简介:

unordered_set是C++标准库中的一个容器,用于存储不重复的元素集合。它是哈希表的一种实现,因此能够提供快速的插入、查找和删除操作。它的特性如下:

  • 有序性:unordered_set中的元素是无序的,也就是说你不能预知添加到容器中的元素将按照什么样的顺序排列。
  • 唯一性:unordered_set中的元素必须是唯一的,相同的元素只能添加一次。
  • 容纳类型:unordered_set只允许存储可以hash的对象,例如整型、浮点型、字符串、自定义对象等。
  • 预算大小:你可以指定unordered_set容器的预算大小,这样容器可以在初期就分配足够的内存空间。

unordered_set的操作主要包括:

  • 插入:可以通过insert函数向容器中插入元素。

  • 查找:可以通过find函数查找容器中的元素。

  • 删除:可以通过erase函数删除容器中的元素。

  • 访问:可以通过迭代器访问容器中的元素。
    使用unordered_set的好处在于其高效的操作性能,特别是对于数据量较大的场景,可以大大提高代码的执行效率。具体详细说明如下:

二、详细操作

1.头文件

#include <unordered_set>

2.插入元素

使用 insert 函数来插入元素到 std::unordered_set 中:

numbers.insert(42);
numbers.insert(17);
numbers.insert(23);
numbers.insert(42);  // 重复元素将被忽略

3.遍历 std::unordered_set

for (const auto& number : numbers) {
    std::cout << number << std::endl;
}

4.删除元素

你可以使用 erase 函数来删除特定元素:

numbers.erase(17);

5.查找元素

auto it = numbers.find(42);
if (it != numbers.end()) {
    std::cout << "Found: " << *it << std::endl;
} else {
    std::cout << "Not Found" << std::endl;
}

6.综合示例

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> numbers;
    numbers.insert(42);
    numbers.insert(17);
    numbers.insert(23);
    numbers.insert(42);

    for (const auto& number : numbers) {
        std::cout << number << std::endl;
    }

    auto it = numbers.find(17);
    if (it != numbers.end()) {
        std::cout << "Found: " << *it << std::endl;
    } else {
        std::cout << "Not Found" << std::endl;
    }

    numbers.erase(17);

    for (const auto& number : numbers) {
        std::cout << number << std::endl;
    }

    return 0;
}

三、实际场景应用:

  • 编译器中的符号表管理:编译器在解析源代码时会建立一个符号表,用来记录变量、函数等实体的信息。由于符号表中的元素通常是唯一的,并且需要频繁地进行插入和查找操作,因此可以使用unordered_set来实现这个功能。
  • 数据库索引:数据库为了提高查询速度,通常会对数据表建立索引。索引中的元素通常是唯一的,并且需要频繁地进行插入和查找操作,因此可以使用unordered_set来实现这个功能。
  • 图形渲染中的顶点缓存:图形渲染中需要多次绘制相同的几何形状,为了提高效率,可以将这些形状的顶点数据存储在一个unordered_set中,每次绘制时直接从缓存中读取,避免了重复计算。
  • 文件系统中的目录结构:文件系统的目录结构可以用一个unordered_set来表示,其中每个元素代表一个子目录,键值对应子目录的名字。这样就可以方便地查找和修改目录结构。

那么unordered_set的用法就讲到这里,下一章看list的用法。关注我,为大家持续分享更多的内容,让学习变得更简单,与君共勉,共同成长。也可以关注我的公众号CoderSong,查看更多精彩文章。

文章来源:https://blog.csdn.net/weixin_45941099/article/details/135820843
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。