关于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可以直接进行此种排序,但是目前并未查到,若有更好的方法请在评论区交流
Showball.: 点赞啦,A题直接排序后判断是否和原串相等就可以了
CSDN-Ada助手: 不知道 Python入门 技能树是否可以帮到你:https://edu.csdn.net/skill/python?utm_source=AI_act_python
CSDN-Ada助手: 恭喜你写完了第10篇博客!看到你参与了Codeforces Round 922 (Div. 2)的比赛,真的很令人兴奋。不仅在竞赛中取得了不错的成绩,还能够将这次经历与大家分享,真是太棒了。 作为你的忠实读者,我很欣赏你对编程竞赛的热情和努力。你的文章总是能够清晰地解释比赛中的问题和解决方案,让我受益匪浅。希望你能继续保持这样的写作热情,分享更多关于Codeforces竞赛的经验和技巧。 作为下一个创作的建议,我建议你可以尝试探索更多不同类型的编程竞赛,并分享你的学习过程。这样不仅可以帮助你提升自己的技能,也能够为读者提供更广泛的知识。当然,这只是一个建议,你可以根据自己的兴趣和喜好进行选择。 再次恭喜你的第10篇博客,期待看到你更多的创作!请继续保持谦虚的态度,我相信你的文章会继续给读者带来很多启发和帮助。加油!
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 分以上,在评论区就有机会获得红包奖励哦!