C++ multimap如何使用 允许重复键的关联容器详解

c++++中,std::multimap用于存储多个相同键的关联容器。它允许插入多个相同键值,使用insert()函数可添加单个或批量元素;查找时需用equal_range()获取指定键的所有元素;遍历默认按键升序排列,也可自定义排序规则;删除时可用erase()删除特定位置或所有相同键元素,需注意迭代器失效问题。

C++ multimap如何使用 允许重复键的关联容器详解

在C++中,如果你需要一个能存储多个相同键的关联容器,std::multimap就是你要找的那个。它和std::map类似,但最大的区别在于:允许重复的键值。也就是说,你可以有多个相同的键对应不同的值。

C++ multimap如何使用 允许重复键的关联容器详解

这篇文章就来聊聊怎么用multimap,包括插入、查找、遍历这些常用操作,以及一些你可能会忽略的小细节。

插入元素:多种方式可以选

multimap支持多种插入方式,最常见的是使用insert()函数。你可以插入一个完整的键值对,也可以使用make_pair简化写法。

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

C++ multimap如何使用 允许重复键的关联容器详解

例如:

std::multimap mm;mm.insert({1, "apple"});mm.insert(std::make_pair(1, "orange"));

上面这段代码插入了两个键为1的元素。注意,multimap不会覆盖已有键,而是保留所有键值对。

C++ multimap如何使用 允许重复键的关联容器详解

如果你想插入多个元素,可以用范围插入:

std::vector<std::pair> vec = {{2, "banana"}, {2, "grape"}};mm.insert(vec.begin(), vec.end());

这样就可以批量添加内容了。

查找与访问:用equal_range是关键

因为multimap允许重复键,所以不能像map那样直接通过[]或者find()获取唯一的值。这时候需要用到equal_range()函数,它会返回一个pair,表示该键对应的所有元素的范围。

举个例子:

auto range = mm.equal_range(1);for (auto it = range.first; it != range.second; ++it) {    std::cout <second << std::endl;}

这样就能遍历所有键为1的元素了。

另外需要注意几点:

find()虽然也能找到某个键的第一个元素,但它只返回一个迭代器,无法获取全部。如果你想知道某个键是否存在,可以用count()函数判断数量是否大于0。

遍历元素:和map差不多,但顺序默认按键排序

multimap默认是按键升序排列的(底层实现是红黑树),所以遍历的时候也是按照键的顺序输出。

遍历方法如下:

for (const auto& pair : mm) {    std::cout << pair.first << ": " << pair.second << std::endl;}

如果你希望自定义排序规则,可以在声明时传入比较函数对象,比如降序:

std::multimap<int, std::string, std::greater> mm;

这样键就会从大到小排列。

删除元素:要小心处理多个键的情况

删除multimap中的元素可以用erase()函数。如果只是删除一个特定位置的元素,可以直接传入迭代器:

auto it = mm.find(1);if (it != mm.end()) {    mm.erase(it);}

但如果你想删除所有键为1的元素,建议用下面这种更稳妥的方式:

mm.erase(1);

这会一次性删除所有键等于1的元素。

需要注意的是,删除之后原来的迭代器可能失效,尤其是使用equal_range后,不要继续用之前的迭代器访问。

基本上就这些。multimap虽然比map复杂一点,但只要记住“允许多个相同键”这个核心点,在操作上稍作调整就可以了。

以上就是C++ multimap如何使用 允许重复键的关联容器详解的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1468205.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月18日 17:30:13
下一篇 2025年12月18日 17:30:24

相关推荐

发表回复

登录后才能评论
关注微信