Sortierreihenfolge in STL map und set

8

Wie werden die benutzerdefinierten Objekte in Map und Set sortiert? Soweit ich weiß, sind map / set sortierte assoziative Container: Die einzufügenden Elemente werden basierend auf dem Schlüssel sortiert, den sie enthält.

Aber map und set intern verwenden operator > , um ihre Elemente zu sortieren.

Von der SGI-Site habe ich folgende Beispiele:

%Vor%

Wie werden die Werte im obigen Beispiel sortiert?

Bearbeiten: Code aus Kommentar verschoben:

%Vor%

Wie würden die Werte sortiert?

    
ronan 30.07.2010, 09:24
quelle

2 Antworten

8

std::map verwendet einen Funktor zum Sortieren von Elementen. Standardmäßig ist es std::less<Key> , das operator< verwendet. In Ihrem Beispiel gibt es einen benutzerdefinierten Funktor ltstr , der hilft, Elemente nach ihren Schlüsseln in alphabetischer Reihenfolge zu sortieren.

    
Kirill V. Lyadvinsky 30.07.2010, 09:32
quelle
3

Zunächst wird operator< standardmäßig verwendet und nicht operator> . In Ihrem Fall übergeben Sie eine benutzerdefinierte Vergleichsfunktion, indem Sie beim Erstellen des Kartenobjekts den dritten Vorlagenparameter übergeben. Während jedes Element in die Karte eingefügt wird, wird dieser Vergleichsfunktor verwendet, um die relative Reihenfolge des Objekts in der Karte zu bestimmen, d. H. Es wird verwendet, um die Schlüssel zu vergleichen. Wenn Sie beispielsweise months["february"] = 28; ausführen, vergleicht map die Schlüssel "Januar" und "Februar". Da wir einen Zeichenkettenvergleich durchführen, gibt dieser Vergleich einen Wert größer als 0 zurück. Dieser Wert wird verwendet, um die Position des Schlüssels "Februar" in Bezug auf "Januar" zu bestimmen.

    
Naveen 30.07.2010 09:31
quelle

Tags und Links