2 votes

Recherche d'une valeur inférieure ou supérieure à la classe du conteneur.

Actuellement, j'ai un std::map <DWORD, DWORD> et je cherche une valeur clé correspondant à une plage spécifique.

Par exemple :

Trouver une valeur clé de la carte dont la valeur doit être soit inférieure à < 50 soit supérieure à > 50 de la valeur clé recherchée.

Si la valeur de la clé recherchée est 20, je voudrais une valeur de clé de l'intervalle de map, c'est-à-dire

-70.............20............+70

Existe-t-il un meilleur moyen de trouver une valeur de clé autre que l'utilisation de deux boucles (la première pour moins que, la seconde pour plus que) ou un moyen approprié de stocker les données de la table pour une telle opération ?

5voto

Steve Townsend Points 36948

Vous pouvez utiliser map::lower_bound y map::upper_bound pour cela, si vous connaissez d'avance la valeur du milieu de gamme.

map<int, MyClass>::const_iterator lower = 
    myMap.lower_bound(-30);   // or -70 if you prefer
map<int, MyClass>::const_iterator upper = myMap.lower_bound(70);

Les deux itérateurs doivent être vérifiés pour myMap.end() avant de déréférencer.

Cet extrait repose sur le fait que votre ordre est l'ordre ascendant habituel - un ordre personnalisé pourrait inverser cet ordre de sorte que les numéros -ve apparaissent après les numéros +ve. Il n'y a pas de meilleur moyen de faire cela - par construction de l'élément map comme un arbre binaire, ce sera efficace.

Voir également les échantillons en ligne pour limite inférieure y limite supérieure .

Notez que DWORD n'est pas signé, donc l'utilisation de nombres négatifs dans votre carte peut vous donner une erreur d'avertissement, et -70 étant inopinément > 70.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X