Mit einer STL Karte / set / multiset / multimap, wie der erste Wert größer als oder gleich dem Suchschlüssel finden?
-
05-07-2019 - |
Frage
Angenommen, ich habe eine Reihe von Werten in einem std :: gespeichert Satz:
{1, 2, 6, 8}
und ich einen Suchschlüssel, sagen wir, 3. I 3 in eine Funktion setzen wollen und den ersten Wert von größer oder gleich 3 ist, in diesem Fall erhalte ich möchte 6 erhalten.
Die find () Funktion zur Verfügung gestellt in der Karte / set / multimap / und Satz wird natürlich, senden Sie das Ende Iterator für diesen Fall. Gibt es eine ähnliche Funktion zu finden, dass 6 in diesem Fall zurückkommen würde?
Lösung
Ja: upper_bound(X)
gibt einen Iterator auf das erste Element zeigt mehr als X
. Es gibt auch eine lower_bound(X)
Funktion, die einen Iterator auf das erste Element nicht weniger als X
zeigt zurückgibt. Somit sind alle der Elemente in der halboffenen Intervall [lower_bound(X), upper_bound(X))
wird X gleich sein.
Andere Tipps
Sie wollen, dass die upper_bound Funktion.
map<int, int> mymap = { 1,2,6,8 };
map<int,int>::iterator i = mymap.upper_bound(3); // returns an iterator to the '6' element.
Oops, ich meinte lower_bound , die Member-Funktion, nicht der Algorithmus .
Wenn es nichts in der Menge, die größer ist als oder gleich Ihren Suchbegriff ein, wird es zurückgeben end ().