406 Stimmen

Sortieren eines Vektors in absteigender Reihenfolge

Soll ich die

std::sort(numbers.begin(), numbers.end(), std::greater<int>());

ou

std::sort(numbers.rbegin(), numbers.rend());   // note: reverse iterators

einen Vektor in absteigender Reihenfolge zu sortieren? Gibt es Vor- oder Nachteile bei der einen oder anderen Vorgehensweise?

153voto

mrexciting Punkte 1236

Mit C++14 können Sie dies tun:

std::sort(numbers.begin(), numbers.end(), std::greater<>());

144voto

user541686 Punkte 196656

Der erste Punkt ist eigentlich eine schlechte Idee. Verwenden Sie entweder die zweite oder dies:

struct greater
{
    template<class T>
    bool operator()(T const &a, T const &b) const { return a > b; }
};

std::sort(numbers.begin(), numbers.end(), greater());

Auf diese Weise wird Ihr Code nicht unbemerkt abbrechen, wenn jemand beschließt numbers sollte halten long o long long anstelle von int .

82voto

Pubby Punkte 50647

Verwenden Sie die erste:

std::sort(numbers.begin(), numbers.end(), std::greater<int>());

Es ist eindeutig, was vor sich geht - die Wahrscheinlichkeit eines Missverständnisses ist geringer. rbegin como begin sogar mit einem Kommentar. Es ist klar und lesbar, was genau das ist, was Sie wollen.

Außerdem könnte die zweite Variante angesichts der Natur von Reverse-Iteratoren weniger effizient sein als die erste, obwohl man ein Profil erstellen müsste, um sicher zu sein.

35voto

shoumikhin Punkte 1267

Und was ist damit?

std::sort(numbers.begin(), numbers.end());
std::reverse(numbers.begin(), numbers.end());

33voto

Julian Declercq Punkte 1436

Anstelle eines Funktors, wie von Mehrdad vorgeschlagen, könnte man eine Lambda-Funktion verwenden.

sort(numbers.begin(), numbers.end(), [](const int a, const int b) {return a > b; });

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X