如何使用带有键值的std :: map容器降序。
例如,如果插入以下项目:
[2 , 5]
[1 , 34]
[3 , 67]
他们将在地图中订购,如:
position 0: [1, 34]
position 1: [2, 5]
position 2: [3, 67]
我可以反向迭代地图,但假设我下次插入[-1,60]。它会被放在第一个位置吗?
答案 0 :(得分:44)
当默认订单不适合您时,请使用自定义比较器
您将其作为第三个模板参数传递(通常默认为std::less<KeyType>
)
在您的情况下,您可以使用std::greater
:
std::map<int, int, std::greater<int> > m;
示例代码:
#include <map>
#include <iostream>
#include <functional>
int main() {
std::map<int, int, std::greater<int>> m { {-1, 77}, {0, 42}, {1, 84} };
for (const auto& p : m)
std::cout << '[' << p.first << ',' << p.second << "]\n";
}
结果输出:
[1,84]
[0,77]
[-1,42]
答案 1 :(得分:0)
std::map
已经排序,因此您只需使用reverse_iterator
遍历地图。
然而,地图不是数组。地图中没有“第n个位置”这样的东西。 (std::map
最常使用某种二叉搜索树来实现。)如果您绝对,需要手动指定顺序,那么请使用std::vector<std::pair>
。