0

0

C++中std::multiset和std::multimap的用法_C++多重容器使用与操作方法

尼克

尼克

发布时间:2025-11-10 20:10:04

|

343人浏览过

|

来源于php中文网

原创

std::multiset和std::multimap是C++中允许重复键的有序关联容器,分别用于存储可重复元素和键值对,支持自动排序、equal_range查找及高效插入删除操作。

c++中std::multiset和std::multimap的用法_c++多重容器使用与操作方法

在C++标准库中,std::multisetstd::multimap 是基于有序关联容器的多重集合类型,它们允许存储重复的元素或键值对。与 std::set 和 std::map 不同的是,这两个容器不强制键的唯一性,因此更适合需要处理重复键的场景。

std::multiset 基本用法

std::multiset 是一个自动排序且允许重复元素的集合。它底层通常由红黑树实现,插入、删除和查找操作的时间复杂度为 O(log n)。

常用操作示例:

  • 插入元素:使用 insert() 方法可添加重复值
  • 查找元素:equal_range() 可获取所有匹配值的迭代器范围
  • 删除元素:erase() 可删除指定值或迭代器指向的元素
  • 遍历:支持正向和反向迭代器遍历所有元素

例如:

立即学习C++免费学习笔记(深入)”;

#include 
#include 

std::multiset mset;
mset.insert(5);
mset.insert(3);
mset.insert(5); // 允许重复
mset.insert(1);

// 遍历输出:1 3 5 5
for (const auto& val : mset) {
    std::cout << val << " ";
}

// 查找所有值为5的元素
auto range = mset.equal_range(5);
std::cout << "\nCount of 5: " << std::distance(range.first, range.second);

std::multimap 基本用法

std::multimap 是一个键可重复的键值对容器,适合一对多映射关系,如学生姓名对应多个成绩。

Copysmith
Copysmith

Copysmith是一款面向企业的 AI 内容创建解决方案

下载

关键特性:

  • 按键自动排序(默认升序)
  • 允许相同键存在多个键值对
  • insert() 总是成功,即使键已存在
  • equal_range(k) 返回 pair 表示该键的所有值范围

示例代码:

#include 
#include 

std::multimap mmap;
mmap.insert({"Alice", 85});
mmap.insert({"Bob", 90});
mmap.insert({"Alice", 95}); // 同名不同值

// 输出所有键值对
for (const auto& pair : mmap) {
    std::cout << pair.first << ": " << pair.second << "\n";
}

// 获取 Alice 的所有成绩
auto range = mmap.equal_range("Alice");
for (auto it = range.first; it != range.second; ++it) {
    std::cout << "Alice score: " << it->second << "\n";
}

常见操作与注意事项

两个容器都提供类似的操作接口,但需注意以下细节:

  • 不能使用下标 operator[] 访问 multimap 元素(因为键不唯一),应改用 insert 或 find
  • 删除特定键的所有实例可用 erase(key),只删一次则传入迭代器
  • 自定义排序可通过模板参数指定比较函数对象,如 greater
  • 数据遍历时建议使用 const_iterator 或范围 for 循环避免意外修改

例如按降序排列 multiset:

std::multiset> descending_set;
descending_set.insert(1);
descending_set.insert(3);
descending_set.insert(2);
// 输出:3 2 1

基本上就这些。掌握 std::multiset 和 std::multimap 的核心在于理解“允许重复”这一特性,并善用 equal_range 来处理多值情况。它们在需要维护有序且允许多个相同键的场景中非常实用。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

988

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

48

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

136

2025.12.29

golang map内存释放
golang map内存释放

本专题整合了golang map内存相关教程,阅读专题下面的文章了解更多相关内容。

73

2025.09.05

golang map相关教程
golang map相关教程

本专题整合了golang map相关教程,阅读专题下面的文章了解更多详细内容。

25

2025.11.16

golang map原理
golang map原理

本专题整合了golang map相关内容,阅读专题下面的文章了解更多详细内容。

36

2025.11.17

java判断map相关教程
java判断map相关教程

本专题整合了java判断map相关教程,阅读专题下面的文章了解更多详细内容。

31

2025.11.27

excel制作动态图表教程
excel制作动态图表教程

本专题整合了excel制作动态图表相关教程,阅读专题下面的文章了解更多详细教程。

24

2025.12.29

freeok看剧入口合集
freeok看剧入口合集

本专题整合了freeok看剧入口网址,阅读下面的文章了解更多网址。

74

2025.12.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
nginx浅谈
nginx浅谈

共15课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号