我们如何将元素添加到 map<int,int>... 以便它们在 map 中以非递增顺序存储

问题描述

如何按非递增顺序对值进行 std::map<int,int> 排序?

map<int,int> mp;
  
mp[5]=7; // {5->7}
mp[3]=9; // {5->7,3->9}
mp[4]=9; // {5->7,4->9,3->9}

解决方法

#include <iostream>
#include <map>

int main()
{
  std::map<int,int,std::greater<int>> mp; 
  mp[5] = 7;
  mp[3] = 9;
  mp[4] = 9;

  for (auto [k,v] : mp)
  {
    std::cout << "\n" << k << "->" << v;
  }
  return 0;
}

打印:

5->7
4->9
3->9

我们使用 std::greater<int> 而不是默认的 std::lesser<int> 参见 std::map


另请注意,您还可以使用 reverse_iteratorrbegin()/rend() 方法)迭代逆序:

  auto iter = mp.rbegin();
  const auto iter_end = mp.rend();

  while (iter != iter_end)
  {
    std::cout << "\n" << iter->first << "->" << iter->second;
    ++iter;
  }

将以相反的顺序打印映射(键,值)...

3->9
4->9
5->7