C++ set、unordered_set、multiset它们之间的区别与一些使用方法(不断更新)
创始人
2024-05-28 14:03:56
0

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()

相关内容

热门资讯

宇树科技被起诉,什么原因? 涉及侵权责任纠纷案件 投资时间网、标点财经快讯 天眼查法律诉讼信息显示,近日,杭州宇树科技股份有限公...
惠城环保:已制定《市值管理制度... 证券之星消息,惠城环保(300779)12月31日在投资者关系平台上答复投资者关心的问题。 投资者提...
看2026|和尔解王倩:降低调... 站在“十五五”新程待启的关键时点,如何看待2026年的经济形势?2026年经济工作怎么干?新京报贝壳...
奇瑞汽车申请满足软件升级法规要... 国家知识产权局信息显示,奇瑞汽车股份有限公司申请一项名为“一种满足软件升级法规要求的升级测试优化方法...
国台办:公安机关发布悬赏通告并... 12月31日上午,国台办在新闻发布厅举行例行新闻发布会,发言人张晗就近期两岸热点问题回答记者提问。 ...
元旦前发布这种朋友圈,他们面临... 元旦即将到来 不少人想买点烟花爆竹 增添节日氛围 朋友圈里也出现了 各种烟花爆竹的广告 但你知道吗 ...
“护航”增值税法顺利实施 配套... 新华社北京12月31日电 《经济参考报》12月31日刊发记者韦夏怡采写的文章《“护航”增值税法顺利实...
《山东省行政调解办法》5月1日... 在我们的日常生活中,难免会遇到各种纠纷,调解作为重要的纠纷解决方式,在维护群众权益方面发挥了重要作用...
上海发文推进老年人意定监护制度... 12月31日,上海市政府官网发布《上海市人民政府办公厅关于推进实施老年人意定监护制度的若干意见(试行...