当前位置: 首页 > news >正文

C++ set、unordered_set、multiset它们之间的区别与一些使用方法(不断更新)

set、unordered_set、multiset是什么?以及它们之间的区别

首先,它们三个都是C++标准库提供的关联容器中的一种。只不过set、multiset容器是有序的,而unordered_set容器是无序的

  • std::set 是 C++ 标准库中的一个容器,其存储的元素按设定的顺序排列。它使用平衡二叉树实现,允许通过元素值直接访问元素。它还提供 log(n) 的快速搜索时间。

  • std::unordered_set 是一个关联容器,其存储的元素没有特定的顺序,可以通过元素的值来访问。它使用散列表实现,提供更好的访问性能。

  • std::multiset 与 std::set 类似,但是它允许重复。它不会尝试保持自己的数据排序,而是依赖哈希表决定具体元素所在的位置。

使用set

C++中的Sets可以用作实施与算法相关的问题的有效工具。 它们有助于搜索,排序,删除和插入元素等活动。 这包括通过另一个值替换现有值,查找最小或最大元素等任务。

由于其平衡的树结构,集合结构的时间复杂度总是至少为O(log n),因此在处理频繁更新的数据集时,这将是最佳选择。

使用unordered_set

C++中的无序sets利用哈希表结构存储和组织元素。 它不保证排序,但仍可以使用集合中的某些操作,例如插入和删除元素,以常量时间搜索元素以及查找两个元素是否相等。

使用无序集时,由于不能保证存储元素的排序,无法使用与sets相关的任何需要排序的操作。

在做leetcode上面的算法题时,如果不需要维持元素中的顺序,使用unordered_set这种数据结构比set这种数据结构耗时要少。

使用multiset

Multisets是允许存储重复元素的容器。 当解决元素出现频率很重要的问题时可以使用它,例如频率分析。 在许多情况下,它可以提供额外的功能; 例如添加节点的发生率并更新发生率。

通常可以使用来自set和unordered_set的所有操作,以及特定的multiset操作,例如以其关联频率删除元素的能力。

set、unordered、multiset之间的通用操作。

因为他们都是属于C++中的关联容器,所以说他们都可以执行一些同样的操作,且函数名也是一样的。

插入操作

c.insert(v) // 插入一个元素,v是对应容器类型的一个元素。

c.insert(b,e) // b和e是一对迭代器,表示一个范围,将这个范围内的所有元素添加到容器中。区间是左闭右开

c.insert(il) // 其中il是一个列表,将列表中的元素全部都添加进容器中,如果是不允许重复的容器,则只添加没有添加过的元素。

删除操作

c.erase(k) // 从c中删除每个关键字为k的元素。返回一个size_type值,指出删除元素的数量。

访问操作

c.find(k); // 返回一个迭代器,指向第一个关键字为k的元素,若k不在容器中,则返回尾后迭代器。

c.count(k); //返回关键字等于k的元素的数量。对于不允许重复关键字的容器,返回值永远是0或1。

在不需要计数的情况,查找一个元素,最好是用find(),如果还需要统计元素的数量,这个时候再去考虑用count()

http://www.lryc.cn/news/27690.html

相关文章:

  • hadoop调优
  • EM@三角函数诱导公式
  • 是不是只能学IT互联网技术才有发展前途?
  • Linux 进程:exit和_exit的辨析
  • 智能电子标签——商超版价签
  • 计算机网络自检
  • DC真实数据都有哪些?Filecoin为DC数据存储的解决方案又是什么?
  • 解决vscode无法自动更新
  • 315线上知识竞赛答题活动方案及模板分享
  • 论文复现-2:代码部分
  • Linux开放的端口太多了?教你一招找出所有开放的端口,然后直接干掉!
  • mysql集群简介
  • 装饰器模式
  • 21 Nacos客户端本地缓存及故障转移
  • 遍历读取文件夹下的所有文件
  • nexus安装与入门
  • Flink SQL Checkpoint 学习总结
  • 2023年“楚怡杯“湖南省职业院校技能竞赛“网络安全”竞赛任务书
  • MyBatis中主键回填的两种实现方式
  • Windows11如何打开ie浏览器
  • Linux:进程间通信
  • 【java】将LAC改造成Elasticsearch分词插件
  • TPM 2.0实例探索3 —— LUKS磁盘加密(5)
  • mybatisplus复习(黑马)
  • 【数据聚类|深度聚类】Deep Comprehensive Correlation Mining for Image Clustering(DCCM)论文研读
  • CE认证机构有哪些机构?
  • MYSQL5.7:Access denied for user ‘root‘@‘localhost‘ (using password:YES)解决方法
  • 单目运算符、双目运算符、三目运算符
  • 离线数据仓库项目搭建——准备篇
  • 十七、本地方法接口的理解