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

C++ STL中 `set` 和 `multiset` 简单对比

在 C++ STL 中,setmultiset 都是用于存储唯一或重复元素的关联容器,但它们在处理元素的唯一性和特性方面有显著的区别。以下是这两个容器的详细比较:

1. 数据结构

  • set:基于红黑树(自平衡的二叉搜索树)实现,存储元素时保证每个元素的唯一性。
  • multiset:同样基于红黑树实现,但允许存储重复元素,即同一个值可以出现多次。

2. 元素的唯一性

  • set:每个元素必须是唯一的。如果尝试插入一个已存在的元素,它将不会被插入。
  • multiset:允许多个相同的元素,因此可以存储重复的值。

3. 查找、插入、删除效率

  • set

    • 查找、插入和删除操作的平均时间复杂度为 O(log n),因为需要在红黑树中维护元素的顺序。
  • multiset

    • 查找、插入和删除的平均时间复杂度也为 O(log n),却可以存储多个相同的元素。

4. 迭代和访问

  • set:可以按顺序遍历元素(默认是升序),每个键只有一个值。
  • multiset:同样可以按顺序遍历元素,重复的元素会按插入顺序排列。

5. 应用场景

  • set

    • 适用于需要唯一性且希望元素自动排序的场合,例如计算不同单词的数量、存储唯一的配置项等。
  • multiset

    • 适用于需要存储重复值并保持有序的场合,例如统计字符出现频率、投票结果等。

示例代码

以下是使用 setmultiset 的简单示例:

#include <iostream>
#include <set>int main() {// 使用 setstd::set<int> uniqueSet = {3, 1, 2, 2, 4};std::cout << "Set (无重复):";for (int num : uniqueSet) {std::cout << num << " ";  // 输出去重后的元素}// 使用 multisetstd::multiset<int> orderedMultiset = {3, 1, 2, 2, 4};std::cout << "\nMultiset (允许重复):";for (int num : orderedMultiset) {std::cout << num << " ";  // 输出有序且允许重复的元素}std::cout << std::endl;return 0;
}

结论

选择 set 还是 multiset 主要依赖于需求:

  • 如果需要确保元素的唯一性并按顺序管理,它是选择 set 的最佳时机。
  • 如果需要处理重复元素,并且希望仍然有序,那么 multiset 是理想的选择。😊
http://www.lryc.cn/news/415572.html

相关文章:

  • 代码随想录算法训练营Day20 | Leetcode 235 二叉搜索树的最近公共祖先 Leetcode 701 二叉搜索树中的插入操作
  • 第九届世界3D渲染大赛:赛程安排、赛事规则
  • RocketMQ5.0 Consumer Group
  • vulnhub之serial
  • 卷积神经网络(CNN)简单原理与简单代码实现
  • 实时数仓分层架构详解
  • 计算机“八股文”在实际工作中是助力、阻力还是空谈?
  • 新160个crackme - 022-CM_2
  • 在.c和.h 文件里定义数组的区别
  • 使用Step Functions运行AWS Backup时必备的权限要点
  • 强化JS基础水平的10个单行代码来喽!(必看)
  • 大模型学习笔记 - 大纲
  • 苹果电脑可以玩什么小游戏 适合Mac电脑玩的休闲游戏推荐
  • 浅谈KMP算法(c++)
  • 关于C++编程注意点(竞赛)
  • Markdown文本编辑器:Typora for Mac/win 中文版
  • Mysql-窗口函数一
  • Python3 爬虫 数据抓包
  • js强制刷新
  • yolov5 part2
  • Hive3:表操作常用语句-内部表、外部表
  • 【PXE+kickstart】linux网络服务之自动装机
  • vmware ubuntu虚拟机网络联网配置
  • Vue3_对接声网实时音视频_多人视频会议
  • 慧灵科技:创新引领自动化未来
  • 【TiDB 社区智慧合集】TiDB 在核心场景的实战应用
  • JetBrains:XML tag has empty body警告
  • XMLDecoder反序列化
  • C# 高级数据处理:深入解析数据分区 Join 与 GroupJoin 操作的应用与实例演示
  • 数据库典型例题2-ER图转换关系模型