c++ std::按键的降序映射项

C++ std::map items in descending order of keys

本文关键字:降序 映射 std c++      更新时间:2023-10-16

如何使用按键值降序排列的std::map容器

例如,插入以下条目:

[2 , 5]
[1 , 34]
[3 , 67]

它们将在地图中按如下顺序排列:

position 0: [1, 34]
position 1: [2, 5]
position 2: [3, 67]

我可以反向遍历映射,但假设下次我插入[- 1,60]。它会被放在第一个位置吗?

当默认顺序不适合您时,请使用自定义比较器。
您将其作为第三个模板参数传递(通常默认为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]

std::map已经排序,所以您只需要使用reverse_iterator遍历地图。

map不是数组。地图上没有所谓的"第n个位置"。(std::map通常使用某种二叉搜索树来实现。)如果绝对不可避免地需要手动指定顺序,则使用std::vector<std::pair>