Comment j'utilise le conteneur std :: map avec la valeur de clé dans l'ordre décroissant.
Par exemple, si insérez les éléments suivants:
[2 , 5]
[1 , 34]
[3 , 67]
Ils seront classés dans la carte comme:
position 0: [1, 34]
position 1: [2, 5]
position 2: [3, 67]
Je peux parcourir la carte à l'envers, mais supposons que la prochaine fois que j'insérerai [-1, 60]. Sera-t-il placé en première position?
Utilisez un comparateur personnalisé lorsque la commande par défaut ne le fait pas pour vous.
Vous le transmettez comme troisième paramètre de modèle (qui est normalement défini par défaut sur std::less<KeyType>
).
Dans votre cas, vous pouvez utiliser std::greater
:
std::map<int, int, std::greater<int> > m;
Exemple de 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";
}
Sortie résultante:
[1,84]
[0,77]
[-1,42]
std::map
est déjà trié, vous n'avez donc qu'à parcourir la carte à l'aide d'un reverse_iterator
.
Une carte, cependant, n'est pas un tableau. Il n'y a rien de tel que "la nième position" sur une carte. (std::map
est le plus souvent implémenté en utilisant une sorte d'arbre de recherche binaire.) Si vous absolument, inévitablement devez spécifier l'ordre manuellement, alors utilisez un std::vector<std::pair>
.