C++ std::map Schlüssel Art Vergleich-Funktion?
Habe ich eine Klasse, wo ich überlast alle Vergleichsoperatoren. Ich lade eine Reihe von diese Objekte in einer map als Schlüssel-und ich erwarte, dass die Karte, um diese zu Sortieren niedrigsten zum höchsten.
Allerdings, die Karte ist eigentlich sortiert von der höchsten zur niedrigsten. Warum ist das so? Tut Sie es nicht verwenden Sie die Vergleichsoperatoren auf den Schlüssel, wenn es sortiert die Karte? Wie kann ich es tun?
- Poste bitte den code, Es ist unmöglich zu beantworten, ohne zu sehen, den code.
std::map
standardmäßig verwendetoperator<
. Sind Sie sicher, dass Ihre Implementierung vonoperator<
ist nicht rückwärts?- Wie sind Sie mit der überprüfung der Bestellung? Können Sie überprüfen die erwartete Bestellung von hand, z.B.
cout << obj1 << " < " << obj2 << " is " << boolalpha << (obj1 < obj2) << endl;
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn man sich die definition für std::map, der 3. parameter ist die Komparator -
std::less< Key >
standardmäßig. Die default-Implementierung ist nur zum aufrufenoperator<
.Könnten Sie versuchen, die Definition einer neuen version in der Kopfzeile, wo
YourType
definiert ist, etwa so:Erinnern zu Freund
std::less< YourType >
in Ihrer Klasse.Dem eigentlichen test muss folgende Kriterien erfüllen, oder du wirst alle Arten von Problemen:
Eine wichtige Sache zu beachten (dass ich relativ neu entdeckt) ist, dass wenn dein compiler beginnt darüber beschwert, dass Sie haben neu definiert die Bedeutung von
std::less
oder andere abgefahrene Dinge, es könnte sein, dass Sie bisher nur vorwärts erklärt IhreYourType
wenn Sie erklärt Ihrestd::map< YourType >
.Hoffe, das hilft!
Sollten Sie veröffentlichen Sie Ihren code implementiert, dass die überladung der Vergleichs-Operatoren, so kann die Antwort basiert auf raten:
Dein problem könnte ein einfacher Tippfehler (ich hab das einmal)
aber eigentlich möchten Sie: