关于multimap相同key值时按value大小排序的一些见解

在使用multimap的过程中发现有时我们需要对相同key值的value进行排序,但经过查阅文档后发现,multimap所提供的大小比较器只针对键值,而对于value的大小比较无能为力,对于插入的相同key值的pair只会让他们以插入的顺序保存。

这里将提供前人和我自己对于此类需求的一些见解。

第一种:将multimap中的值压入vector<pair>,再使用sort函数自定义比较排序,实际上这种比较方式十分冗余,失去了multimap的使用必要,不如直接将pair插入vector进行排序。

时间复杂度:n*logn~n^2 空间复杂度n+n

第二种:使用双multimap进行排序

int main()
{
    vector<vector<int>>v = { {1,2},{1,1}, {5,6},{3,9},{6,10},{3,5},{1,6},{1,5} };
    multimap<int, int>test_map_NOs;
    for (auto i : v)
    {
        test_map_NOs.insert(make_pair(i[0], i[1]));
    }


    //排序的对比
    multimap<int, int> test_map_s;
    for (auto i : v)
    {
        test_map_s.insert(make_pair(i[1],i[0]));
    }
    multimap<int, int> sort_map;
    for (auto e : test_map_s)
    {
        sort_map.insert(make_pair(e.second, e.first));
    }
    return 0;
}

可以发现,经过两个容器互换,可以排序value。但使用此方式请注意:需要先将value作为key插入中间体multimap,在将value作为value插入回排序好的multimap。

即:先排序value顺序再插入

时间复杂度:n*logn空间复杂度:n+n

第三种:

直接使用multiset<pair<int,int>,Mycmp>作为容器,其中Mycmp为排序的仿函数。

可以将空间复杂度降为n。

但以上方式均感觉属于冗余方式,可能multimap可以直接进行此种排序,但是目前并未查到,若有更好的方法请在评论区交流

放逐#C
关注 关注
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
c++STL常用容器之Map/Multimap容器——全面总结(附案例解析)(十九)map按value值进行比较以及仿函数更改默认排序规则
cfl997
11-26 8833
这里有C++STL——全面总结详细教程(附案例解析)(持续更新中) 目录 map/ multimap容器 map基本概念 map构造和赋值 map大小和交换 map插入和删除 map查找和统计 map容器排序 仿函数更改默认排序规则和Value排序 map/ multimap容器 map基本概念 简介: map中所有元素都是pair pair中第一个元素为...
对于multimap相同keyvalue排序
weixin_44543224的博客
06-17 3621
*@对于multimap相同keyvalue排序 对于key相同c++11是根据你输入的时间顺序对value进行排序的。 例如:(头文件我加着玩的) #include<cstdio> #include <cstdio> #include <iostream> #include <fstream> #include <algorithm&...
multimap的一key对应多value排序(Borrowers UVA - 230)
LIUHAOHAOMJH的博客
04-26 3388
multimap 能接受一key对应多value的情况multimap 会自动按key排序,而value则按输入顺序排序,要想把一个key对应的多个value排序必须自己构造排序函数typedef pair&lt;string, string&gt; PAIR;bool cmp_by_value(const PAIR&amp; lhs, const PAIR&amp; rhs) {    if(...
multimap排序
热门推荐
zhongkeli的专栏
11-02 1万+
如果键值是string型,直接输出就可以了,multimap是排好序了的,如果你要用C风格字符串,就自定义一个排序规则,需要在创建 multimap的时候做: #include #include #include using namespace std; struct cstrcmp_less { bool operator () (const char* a, const ch
map/multimap排序
yutianxin123的专栏
09-06 1万+
multimap排序为例来说明:我们知道multimap是以红黑树为底层实现的,按照插入的键值直接排序。       默认是按照multimap键值的升序排列,如果按降序排列则multimap>       如果希望自定义排序:       #include #include #include #include using namespace std; struct cmp //自定
multimap使用和排序
萧戈的专栏
12-08 9593
 如果键值是string型,直接输出就可以了,multimap是排好序了的,如果你要用C风格字符串,就自定义一个排序规则,需要在创建 multimap的时候做: [cpp] view plain copy print? #include   #include   #include   using namespace std;    struct cstrc
map/multimap 排序操作
wangdamingll的博客
12-23 522
一、背景引入 正如所有了解零件(Widget)的人所知道的,Widget有重量和最高速度 class Widget { public:         ...         size_t weight() const;         size_t maxSpeed() const;         ... }; 此外众所周知的是给Widget排序的自然方法是按
C++ multimap查找相同键的键值对方法
weixin_30588729的博客
01-05 1594
1、使用find和count: count(k) 求出键k的出现次数   find(k) 返回第一个拥有键k的实例 multimap<int, int>::size_type cnt = testMap.count(searchItem); multimap<int, int>::iterator iter = testMap.find(sear...
每天一点C++——获取multimap某个key的所有value
itlilyer的博客
10-11 3242
multimap中可以保存多个key值,介绍一下获取某一key值所有value的方法。这些方法对于multiset也是可以使用的。 使用equal_range 使用count统计出数量 使用lower_bound upper_bound获取起止迭代器,和1类似 代码: #include <iostream> #include <map> using namespace std; typedef multimap<string, string>::iterator
multimap如何取出相同key的值
最新发布
07-13
注意,multimap 中可以有多个相同key,并且 multimap 内部会根据 key 的比较函数自动进行排序。所以在遍历 multimap 时,虽然使用的是普通的 for 循环,但元素并不一定按照插入顺序输出,而是按照 key 值的顺序...
C++ STL自定义排序:按照multimapvalue的字段排序
当涉及到`multimap`中按值排序时,问题在于`multimap`内部的排序是基于键的,而不是基于值。这意味着我们不能直接通过`multimap`的内置机制来完成这个任务。一种可能的解决方案是转换数据结构,例如使用`std::vector...
multimap和priority_queue的排序问题
qq_36458461的博客
02-07 613
multimap和priority_queue的默认排序问题 两者默认的都是less模式,但 1.multimap构造multimap<T1, T2>时,其实是有个默认的比较函数 multimap<T1, T2, less> ,即按key的升序排列 2.priority_queue默认的也是less模式,但是大顶堆即降序排列 定义:priority_queue<Type, Container, Functional> Type 就是数据类型,Container 就是容器
笔试总结(map/multimap/排序
yutianxin123的专栏
09-06 1592
#include #include #include #include using namespace std; int main() { int n,m; cin>>n>>m; vectordes; for(int i=0;i<n;i++) { int k; cin>>k; des.push_back(k); } sort(des.begin(),des.
C++_STL_map(map.insert返回值,三种统计次数,按照key排序,按照value排序(vector/multimap/multiset/优先级队列))
dodamce的博客
10-31 1533
文章目录1.利用map是搜索二叉树特性统计次数2.STL_map.insert()返回值利用map.insert()的返回值来统计次数3.利用[]运算符重载统计次数map中[]运算符重载4.map按照value排序方法一:创建map迭代器数组,调用sort自定义排序规则排序(不稳定)方法二:利用multimap/multiset来改变排序key(稳定)控制multimap和multiset的键值排序方式(仿函数)方法三:利用优先级队列保存map迭代器指针来对map的value排序(堆排序不稳定) 1.利用
STL 排序容器multimap和map用法详解
weixin_41174502的博客
05-09 1063
multimap容器可以对里面的元素按照关键字排序,使用起来非常方便,其基本结构如下: multimap<T1,T2> mp multimap里面的元素都是都是以pair形式出现的,并且只能是两个成员变量,mp里的元素类型如下: struct { T1 first; //关键字 T2 second; //值 }; multimap中的元素按照fi...
支持相同keyMultimap
夜行僧的博客
04-29 582
1. ArrayListMultimap ArrayListMultimap可以支持key相同的键值对,并自动将value转为list。 例如: Multimap<String, Integer> multimap = ArrayListMultimap.create(); multimap.put("a",1); multimap.put("b",2); multimap.put("c",3); multimap.put("a",4); multimap.put("a",5);
C++STL标准库学习笔记(六)multimap
AwakeFantasy的博客
12-14 1570
这篇文章简单介绍了STL标准库中mulitmap的使用
java mutilmap_java – 按照包含的最高值对multimap的键进行排序
weixin_35261385的博客
02-24 180
我使用Guava MultiMap(impl LinkedListMultimap)来允许我为一个键存储多个值,但后来我想按最高值对地图进行排序并返回键.即第一次运行后,我有key1:{13}key2:{7}key3:{11}第二次运行后,我现在有了key1:{13,14}key2:{7,18}key3:{11,1}第三次运行后,我现在有了key1:{13,14,16}key2:{7,18,6}k...
map 按照值排序
奔跑少年
05-30 6919
map 按照值排序 虽然是个比较简单的问题,还是记录一下,以免以后又忘记了又浪费时间去百度。 严格的说在map、multimap并不能按照值排序,只能按照键排序 在STL库里面map和multimap是有序排列的容器,比较器默认使用less&lt;T&gt;,而且规定了只能使用键来排序,当然我们可以自己定义函数对象/仿函数/谓词来比较,但是比较的也只键。默认的定义如下: templ...
写文章

热门文章

  • 关于multimap相同key值时按value大小排序的一些见解 1100
  • codeforces图论1700-2300刷题 1067
  • Codeforces Round 922 (Div. 2) 966
  • codeforces 1600 分题目泛刷 928
  • Codeforces Round 919 (Div. 2)A-E题解 892

分类专栏

  • 跟着一起来补题(codeforces篇)
  • 数学基础 6篇

最新评论

  • Educational Codeforces Round 166 (Rated for Div. 2) 题解

    Showball.: 点赞啦,A题直接排序后判断是否和原串相等就可以了

  • codeforces 1600 分题目泛刷

    CSDN-Ada助手: 不知道 Python入门 技能树是否可以帮到你:https://edu.csdn.net/skill/python?utm_source=AI_act_python

  • Codeforces Round 922 (Div. 2)

    CSDN-Ada助手: 恭喜你写完了第10篇博客!看到你参与了Codeforces Round 922 (Div. 2)的比赛,真的很令人兴奋。不仅在竞赛中取得了不错的成绩,还能够将这次经历与大家分享,真是太棒了。 作为你的忠实读者,我很欣赏你对编程竞赛的热情和努力。你的文章总是能够清晰地解释比赛中的问题和解决方案,让我受益匪浅。希望你能继续保持这样的写作热情,分享更多关于Codeforces竞赛的经验和技巧。 作为下一个创作的建议,我建议你可以尝试探索更多不同类型的编程竞赛,并分享你的学习过程。这样不仅可以帮助你提升自己的技能,也能够为读者提供更广泛的知识。当然,这只是一个建议,你可以根据自己的兴趣和喜好进行选择。 再次恭喜你的第10篇博客,期待看到你更多的创作!请继续保持谦虚的态度,我相信你的文章会继续给读者带来很多启发和帮助。加油!

  • Codeforces Round 919 (Div. 2)A-E题解

    CSDN-Ada助手: 恭喜你写了第9篇博客!标题看起来很有深度,我相信你对Codeforces Round 919 (Div. 2)的题目一定有很深入的理解。希望你能继续保持创作的热情,分享更多有关题解的博客。作为下一步的创作建议,或许你可以考虑加入一些个人的思考和观点,这样读者更容易与你的博客产生共鸣,并从中获得更多启发。希望你在未来的创作中不断进步,继续保持谦虚的态度。加油!

  • 第三章、谓词逻辑

    CSDN-Ada助手: 非常感谢您的第二篇博客,看到您持续创作,我觉得非常欣慰。对于谓词逻辑这一主题,我认为您非常深入地探讨了它的本质和实现方法,让我受益匪浅。 除了您在博客中提到的知识和技能,我想和您分享一些扩展的内容。在谓词逻辑的学习过程中,我们可以深入了解一些相关的概念,比如一阶逻辑和二阶逻辑,以及它们的应用场景和差异。此外,我们还可以学习一些基于谓词逻辑的形式化语言,比如Prolog和Datalog等。 希望您能够继续保持创作的热情,分享更多有价值的知识和技能。再次感谢您的分享! 如何写出更高质量的博客,请看该博主的分享:https://blog.csdn.net/lmy_520/article/details/128686434?utm_source=csdn_ai_ada_blog_reply2 如果您持续创作,完成第三篇博客,并且质量分达到 80 分以上,在评论区就有机会获得红包奖励哦!

最新文章

  • Codeforces平台使用指南
  • codeforces图论1700-2300刷题
  • 程序设计比赛举办命题工作流程总结
2024年7篇
2023年8篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家家用玻璃钢花盆制造六安学校玻璃钢雕塑市场丽水玻璃钢海豚雕塑价格漯河玻璃钢动物雕塑厂家电话鹤壁玻璃钢动物雕塑哪里有宁波佛像玻璃钢雕塑浙江个性化玻璃钢雕塑生产厂家浙江玻璃钢雕塑最新招聘福建户外玻璃钢雕塑定做价格功能全品质好的玻璃钢花盆公园摆件玻璃钢雕塑销售价格青海省玻璃钢雕塑报价石家庄玻璃钢仿铜雕塑厂家江宁主题商场美陈淮安玻璃钢雕塑设计厂家玻璃钢动物牛雕塑厂商销售马鞍式玻璃钢花盆十堰玻璃钢雕塑厂家浙江室内商场美陈销售闽侯玻璃钢雕塑厂开工开物铜陵公园玻璃钢雕塑生产厂家关公财神玻璃钢雕塑佛山玻璃钢春节主题雕塑玻璃钢骑马女孩雕塑福建海洋生物玻璃钢雕塑批发大型玻璃钢红酒瓶雕塑玻璃钢卫鞅人物雕塑价格澄迈县玻璃钢花盆摆件玻璃钢卡通雕塑直销南平玻璃钢玩偶雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化