2017-09-23 3 views
1

Ich bin derzeit auf der Suche nach einer Datenstruktur, die ähnlich wie in C++ zugeordnet ist.C++ - Karte, finde das erste Element, das weniger als Schlüssel ist

Ich bin auf der Suche nach einer Funktion, die erste Element zurückgeben kann, die sofort weniger als eine bestimmte Anzahl ist. zum Beispiel:

map<int,int> m; 
m[1] ++; 
m[2] ++; 
m[4] ++; 
m[5] ++; 

find_first_element_less_than(3) ----> return 2; 
m.upper_bound(3) ---> return 4; 

Ich habe an der lower_bound Funktion gesucht. Es sagt jedoch, dass es das erste Element nicht weniger als Schlüssel zurückgibt. In diesem Fall gibt lower_bound (3) 4 zurück, was ich nicht möchte.

Ich frage mich, ob es irgendeine Datenstruktur in C++ gibt, die das für mich tun kann?


AKTUALISIERUNG:

Kann ich auto it = m.lower_bound(3); if (it != m.begin()) it--; tun ??

+0

Dies ist unklar. Willst du das * last * Element finden, dessen Schlüssel kleiner als das Argument ist? (Und möchten Sie, dass die Funktion den Wert oder den Schlüssel oder einen Iterator zurückgibt, oder was?) – Beta

Antwort

2

Sie können die untere Grenze finden und dann den Iterator um 1 dekrementieren, wenn er nicht auf den Anfang der Karte zeigt.

1

Ich denke, Sie könnten dies tun, indem Sie die Reihenfolge Ihrer Karte (map<int,int, std::greater<int> > m;) und dann upper_bound um das erste Element "größer" (aber wirklich weniger, weil Sie das Prädikat invertiert) als das angeforderte Element zu finden. Wenn Sie in aufsteigender Reihenfolge iterieren müssen, müssen Sie umgekehrte Iteratoren verwenden, die für Betreuer (einschließlich Sie selbst) leicht verwirrend sein können. Berücksichtigen Sie sorgfältig Ihre Bedürfnisse in Bezug auf diese mögliche Lösung.

Verwandte Themen