「C/C++」C++ STL容器库 之 std::multiset 键的集合容器

embedded/2024/10/23 17:06:19/

在这里插入图片描述

✨博客主页
何曾参静谧的博客
📌文章专栏
「C/C++」C/C++程序设计
📚全部专栏
「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合
「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发
「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明

目录

      • std::multiset容器详解
        • 1. 引用头文件
        • 2. 注意事项
        • 3. 函数构造与对象初始化
        • 4. 元素访问
        • 5. 迭代器
        • 6. 容器修改器
        • 7. 元素比较
        • 总结与应用场景

std::multiset容器详解

1. 引用头文件

在使用std::multiset容器之前,需要包含相应的头文件<set>。std::multiset是C++标准模板库(STL)中的一种关联容器,用于存储有序的元素,并允许重复元素的存在。

#include <set>
2. 注意事项
  • std::multiset容器中的元素是有序的,根据元素的键值自动进行排序。
  • std::multiset允许存储重复的元素,这是与std::set的主要区别。
  • std::multiset中的元素不能直接修改,只能先删除原来的元素,然后插入新元素。
  • std::multiset的内部实现通常基于红黑树,因此元素的搜索、插入和删除操作都具有对数级的时间复杂度。
3. 函数构造与对象初始化

std::multiset提供了多种构造函数,可以创建空的容器,也可以使用初始化列表、其他容器的迭代器范围等进行初始化。

// 默认构造创建一个空的int类型的multiset
std::multiset<int> myMultiset; 
// 使用初始化列表创建multiset
std::multiset<std::string> myStringMultiset = {"apple", "banana", "orange"}; 
std::vector<int> vec = {1, 2, 2, 3, 4};
// 使用vector的元素初始化multiset
std::multiset<int> myMultisetFromVec(vec.begin(), vec.end()); 
4. 元素访问

在这里插入图片描述

std::multiset不支持使用下标位置直接访问元素,也不支持将元素插入到指定位置。但是可以使用find函数查找特定元素,使用count函数返回特定元素的数量。

std::multiset<int> myMultiset = {5, 10, 15, 20, 25, 20};
auto it = myMultiset.find(20);
if (it != myMultiset.end()) {std::cout << "Element found in multiset: " << *it << std::endl;
}
size_t count = myMultiset.count(20);
std::cout << "Count of 20: " << count << std::endl;
5. 迭代器

在这里插入图片描述

std::multiset提供了迭代器,用于遍历容器中的元素。迭代器支持前向遍历,也提供了反向迭代器(rbegin和rend),用于反向遍历。

std::multiset<int> myMultiset = {5, 10, 15, 20, 25, 20};
for (auto it = myMultiset.begin(); it != myMultiset.end(); ++it) {std::cout << *it << " ";
}
std::cout << std::endl;for (auto it = myMultiset.rbegin(); it != myMultiset.rend(); ++it) {std::cout << *it << " ";
}
std::cout << std::endl;
6. 容器修改器

在这里插入图片描述

std::multiset提供了多种修改器函数,用于插入、删除和清空容器中的元素。

std::multiset<int> myMultiset = {5, 10, 15, 20, 25, 20};
myMultiset.insert(12); // 插入新元素
myMultiset.erase(15); // 删除指定元素
myMultiset.clear(); // 清空所有元素
7. 元素比较

在这里插入图片描述

std::multiset中的元素会根据指定的比较函数进行排序,默认是升序。可以通过指定比较函数来改变排序规则。

std::multiset<int, std::greater<int>> myMultisetDesc; // 创建一个降序排列的multiset
myMultisetDesc.insert(5);
myMultisetDesc.insert(10);
myMultisetDesc.insert(15);for (auto it = myMultisetDesc.begin(); it != myMultisetDesc.end(); ++it) {std::cout << *it << " ";
}
std::cout << std::endl;
总结与应用场景

std::multiset是C++ STL中一个非常有用的容器,具有自动排序、允许重复元素以及快速插入和查找等特点。其内部实现基于红黑树,保证了高效的查找、插入和删除操作。std::multiset适用于需要维护元素顺序且需要存储重复元素的场景。

  • 需要存储有序且允许重复元素的集合。
  • 需要高效查找、插入和删除操作的场景。
  • 需要对元素进行排序和范围查询的场景。

例如,在处理学生成绩时,可以使用std::multiset来存储学生的分数,并方便地进行排序、查找和范围查询等操作。


在这里插入图片描述


http://www.ppmy.cn/embedded/129861.html

相关文章

TinyMCE 富文本编辑器

中文文档 TinyMce在4.0以后就不支持Vue2.0了 1. 安装依赖 yarn add tinymce || npm install tinymce -Syarn add tinymce/tinymce-vue || npm install tinymce/tinymce-vue -S2. 创建组件 在 components 下创建 Tinymce.vue 组件 <template><div class"a…

大数据开发电脑千元配置清单

大数据开发电脑配置清单 电脑型号HUANANZHI 台式电脑操作系统Windows 11 专业版 64位&#xff08;Version 23H2 / DirectX 12&#xff09;处理器英特尔 Xeon(至强) E5-2673 v3 2.40GHz主板HUANANZHI X99-P4T&#xff08;P55 芯片组&#xff09;显卡NVIDIA GeForce GT 610 ( 2…

汽车结构设计外覆盖件抗凹分析的意义和分类

1、车身覆盖件指什么&#xff1f; 车身覆盖件一般是指在车辆表面上能够看到的饭金件&#xff0c;如门外板、顶盖等。覆盖件的尺寸相对较大&#xff0c;往往是依照造型要求&#xff0c;设计出不同的区域曲率。所有的覆盖件都需要经过冲压&#xff0c;塑造出特定的造型&#xff…

【计算机网络 - 基础问题】每日 3 题(四十一)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞…

k8s-pod控制器

Pod控制器介绍 Pod是kubernetes的最小管理单元&#xff0c;在kubernetes中&#xff0c;按照pod的创建方式可以将其分为两类&#xff1a; 自主式pod&#xff1a;kubernetes直接创建出来的Pod&#xff0c;这种pod删除后就没有了&#xff0c;也不会重建控制器创建的pod&#xff1a…

038_基于php校园Flea Market售货平台

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…

如何将两个视频连接成一个?共有6个方法

如何将两个视频连接成一个&#xff1f;在数字媒体日益丰富的今天&#xff0c;视频内容已成为我们生活中不可或缺的一部分。无论是制作个人回忆录、教学演示&#xff0c;还是企业宣传&#xff0c;常常需要将多个视频片段整合成一个完整的作品&#xff0c;以便于播放和分享。特别…

C#学习笔记(一)

C#学习笔记&#xff08;一&#xff09; 简介第一章 上位机开发环境之 VS 使用和.NET 平台基础一、安装软件二、创建项目三、第一个Hello world四、解决方案与项目五、Debug 和 Release 的区别六、代码的生产过程七、CLR的其它功能 简介 C# .NET工控上位机开发 在工控领域&…