C++,STL,映射如何用值而不是键排序

标签 c++ stl

我只想使用值而不是键对 map 容器中的元素进行排序。怎么做?我知道 map 可以按键值排序,但反之亦然。我在 stackoverfrlow 中发现了同样的问题。我喜欢这个solution .但是我想澄清一下“转储到pair<K,V>”是什么意思。我不想为此创建特殊的结构,它不优雅。你如何实现这个 solution

最佳答案

为了将信息从 std::map 转储到 std::vector 中,您可以使用带有两个迭代器的 std::vector 的构造函数。

std::vector<std::pair<K,V> > myVec(myMap.begin(), myMap.end());

然后您可以将其排序为:

std::sort(myVec.begin(),myVec.end(),&myFunction);

myFunction 将是一个用签名定义的函数:

bool myFunction(std::pair<K,V> first, std::pair<K,V> second);

如果它们的顺序正确(即第一个应该在第二个之前),让它返回 true。当它们的顺序错误时返回 false(即第二个应该在第一个之前)。


此外,您可能还想看看 boost::bimap ,这似乎更适合您的问题。

关于C++,STL,映射如何用值而不是键排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8640904/

相关文章:

C++ 程序在退出时崩溃

c++ - 在生产者-消费者代码中使用 wait() boost 条件死锁

c++ - Cin.Ignore() 不工作

c++ - 模板和 STL 容器

c++ - 包含任意类型的任意 STL 容器的函数模板

c++ - 如何从 std::vector 或列表中选择一个子集?

c++ - 如何在 C++ 中将字符串与 const 字符串进行比较

c++ - 交付具有其他依赖项的 xcode 框架

c++ - 创建一组 1 个元素的最佳\最简单\最快的方法是什么? (C++)

c++ - 使用列表c++在 map 中查找元素