Mit einer STL Karte / set / multiset / multimap, wie der erste Wert größer als oder gleich dem Suchschlüssel finden?

StackOverflow https://stackoverflow.com/questions/176376

  •  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?

War es hilfreich?

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.

lower_bound .

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 ().

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top