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

前端 未结 2 1544
轻奢々
轻奢々 2020-12-30 23:09

How cal I use std::map container with key value in descending order.

As an example, if insert the following items:

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


        
相关标签:
2条回答
  • 2020-12-30 23:50

    std::map is already sorted, so you only need to traverse the map using a reverse_iterator.

    A map, however, is not an array. There's no such thing as "the n-th position" in a map. (std::map is most commonly implemented using some sort of binary search tree.) If you absolutely, inevitably need to specify order manually, then use a std::vector<std::pair>.

    0 讨论(0)
  • 2020-12-30 23:52

    Use a custom comparator when the default order doesn't do it for you.
    You pass it as the third template parameter ( that's normally defaulted to std::less<KeyType> ).
    In your case, you can use std::greater:

    std::map<int, int, std::greater<int> > m;
    

    Example code:

    #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";
    }
    

    Resulting output:

    [1,84]
    [0,77]
    [-1,42]
    
    0 讨论(0)
提交回复
热议问题