降順でキー値を持つstd :: mapコンテナを使用する方法。
例として、次のアイテムを挿入する場合:
[2 , 5]
[1 , 34]
[3 , 67]
それらは、マップ内で次のように順序付けられます。
position 0: [1, 34]
position 1: [2, 5]
position 2: [3, 67]
マップを逆順に繰り返すことができますが、次に[-1、60]を挿入するとします。最初の位置に配置されますか?
デフォルトの順序で実行できない場合は、カスタムコンパレーターを使用します。
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]
std::map
は既にソートされているため、reverse_iterator
を使用してマップをトラバースするだけで済みます。
ただし、マップは配列ではありません。マップには「n番目の位置」というものはありません。 (std::map
は、一般的に何らかのバイナリ検索ツリーを使用して実装されます。)絶対に、必然的に順序を手動で指定する必要がある場合は、std::vector<std::pair>
を使用します。