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

这篇具有很好参考价值的文章主要介绍了STL之unordered_set 【无序不重复集合】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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://www.toymoban.com/news/detail-821576.html

到了这里,关于STL之unordered_set 【无序不重复集合】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++入门到精通】哈希 (STL) _ unordered_map _ unordered_set [ C++入门 ]

    欢迎各位大佬们的关顾,本文将介绍unordered系列容器以及其中的两个重要成员: unordered_map 和 unordered_set 。unordered_map是一种无序的关联容器,它使用哈希表来存储键值对,并提供高效的插入、查找和删除操作。在本文中,我们将首先介绍unordered_map的基本概念和特点,然后详

    2024年02月08日
    浏览(43)
  • 封装unordered_set&&unordered_map

    注:实现unordered系列容器是为了学习,因此并非将全部接口实现,所以只实现部分接口 目录 哈希表的改造 模板参数列表的改造 增加迭代器操作 增加通过T获取value操作 HashTable.h的修改 unordered_set的封装 unordered_map的封装 K:关键码类型 T:不同容器T的类型不同,如果是unorder

    2024年02月05日
    浏览(40)
  • 【unordered_map和unordered_set的封装】

    这里的思路与前面讲解map/set的封装思路一致,STL不喜欢直接实例化出两份几乎相同的代码,所以用了模板参数来处理,还是老规矩: set中传入的是K,K,map中传入的是K,PairK,V .这样我们在哈希桶的结构中只需要用一个T类型的模板参数接受上层传入的参数即可。 基本框架的改造:

    2024年02月08日
    浏览(36)
  • 【C++】unordered_map,unordered_set模拟实现

    喜欢的点赞,收藏,关注一下把! 上一篇文章我们把unordered_map和unordered_set底层哈希桶的知识也都说清楚了,今天就根据哈希桶模拟实现出unordered_map和unordered_set。 这里如果看过以前文章【C++】map和set的模拟实现,应该会觉得简单。 因为unordered_map和unordered_set底层都是哈希桶

    2024年01月21日
    浏览(47)
  • 【C++】unordered_set与unordered_map的封装

    🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风翻盘 。 🛸 C++专栏 : C++内功修炼基地 家人们更新不易,你们的👍点赞👍和⭐关注⭐真的对我真

    2024年02月08日
    浏览(48)
  • 【C++】unordered_map和unordered_set的使用

    文章目录 前言 一、unordered_map的使用及性能测试 二、unordered_set的使用 1.习题练习 总结 unordered 系列关联式容器 : 在 C++98 中, STL 提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到O(logN) ,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,

    2024年02月06日
    浏览(48)
  • 【C++】unordered_set 和 unordered_map 使用 | 封装

    unordered_map官方文档 unordered_set 官方文档 set / map与unordered_set / unordered_map 使用功能基本相同,但是两者的底层结构不同 set/map底层是红黑树 unordered_map/unordered_set 底层是 哈希表 红黑树是一种搜索二叉树,搜索二叉树又称为排序二叉树,所以 迭代器遍历是有序的 而哈希表对应的

    2024年02月06日
    浏览(48)
  • 改造哈希表,封装unordered_map和unordered_set

    正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能 学习网站, 通俗易懂,风趣幽默 ,忍不住分享一下给大家。点击跳转到网站。 unordered_map是存的是pair是K,V型的,而unordered_set是K型的,里面只存一个值,那我们如何利用一个数据结构将他们都封装出来呢?

    2024年02月03日
    浏览(48)
  • 【高阶数据结构】封装unordered_map 和 unordered_set

    (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是 Scort 目前状态:大三非科班啃C++中 🌍博客主页:张小姐的猫~江湖背景 快上车🚘,握好方向盘跟我有一起打天下嘞! 送给自己的一句鸡汤🤔: 🔥真正的大师永远怀着一颗学徒的心 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏 🎉🎉

    2024年02月03日
    浏览(42)
  • C++进阶--unordered_set、unordered_map的介绍和使用

      在C++98中,STL提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到 l o g 2 N log_2N l o g 2 ​ N ,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11中,STL又

    2024年01月16日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包