2013-02-24 3 views
5

Also habe ich einen Vektor, und ich möchte die Elemente zu jeder Zeit sortiert werden. Wie soll ich ein Element in diesen Vektor einfügen und die Elemente sortiert halten, wenn ich sie herausbringe? Ich schaute in std::lower_bound, aber das gab das Gegenteil von dem, was ich wollte.Element in einen sortierten Vektor einfügen und Elemente sortiert halten

Zum Beispiel, das ist was ich will: Wenn ich alle Elemente in den Vektor Pop sollte es sein: 1 2 3 4 5. Das bedeutet der Vektor muss sie als 5 4 3 2 1 speichern. Wenn verwenden Untergrenze, der Vektor speichert sie als 1 2 3 4 5, und es wird als 5 4 3 2 1 gepoppt. Auch ein Vergleich Funktor wird übergeben, so dass die lower_bound Funktion den Vergleich Funktor verwendet. Gibt es eine Möglichkeit, das Gegenteil von einem Vergleichsfunktor zu machen?

+2

By the way, 'std :: Set' hält die Dinge geordnet, aber Sie können nicht haben Duplikate (siehe' std :: multiset'). Was das Gegenteil angeht, gibt es 'std :: not1'. – chris

+0

Vielleicht verwenden Sie den falschen Container. Schau mal hier: http://Stackoverflow.com/a/471461/78845 – Johnsyweb

Antwort

21

Um Ihren Vektor ständig zu sortieren, sollten Sie immer neue Elemente in die richtige Position einfügen. Da Sie Elemente in aufsteigender Reihenfolge und Pop nur mit der pop_back() -Methode einfügen möchten, sollten Sie Elemente in absteigender Reihenfolge sortieren. so müssen Sie zuerst die richtige Position und legen Sie dort finden:

typedef std::vector<int> ints; 

void insert(ints &cont, int value) { 
    ints::iterator it = std::lower_bound(cont.begin(), cont.end(), value, std::greater<int>()); // find proper position in descending order 
    cont.insert(it, value); // insert before iterator it 
} 
Verwandte Themen