web-dev-qa-db-ja.com

C ++ std :: mapアイテムのキーの降順

降順でキー値を持つstd :: mapコンテナを使用する方法。

例として、次のアイテムを挿入する場合:

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

それらは、マップ内で次のように順序付けられます。

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

マップを逆順に繰り返すことができますが、次に[-1、60]を挿入するとします。最初の位置に配置されますか?

23
Sigcont

デフォルトの順序で実行できない場合は、カスタムコンパレーターを使用します。
3番目のテンプレートパラメータとして渡します(通常はデフォルトで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]
44
jrok

std::mapは既にソートされているため、reverse_iteratorを使用してマップをトラバースするだけで済みます。

ただし、マップは配列ではありません。マップには「n番目の位置」というものはありません。 (std::mapは、一般的に何らかのバイナリ検索ツリーを使用して実装されます。)絶対に、必然的に順序を手動で指定する必要がある場合は、std::vector<std::pair>を使用します。

0
user3447428