Setzt 'std :: set' in jedem Fall Sortierelemente? [Duplikat]

7

Von cplusplus.com Verweis scheint es, dass std::set Elemente sortiert.

Ich muss Strings sortiert haben, aber ich bin nicht sicher, ob es auf jeder Plattform und jedem Compiler gut funktioniert. Hauptsächlich GCC, MinGW, VC.

    
kravemir 04.08.2012, 13:50
quelle

4 Antworten

16

Nach seiner Definition ist std::set ein sortierter Container. Es ist Teil des Standards. Sortierung hilft dabei, dass es sich um eine Menge und nicht nur um eine willkürliche Sammlung handelt.

Quelle: Ссылка

    
Daniel A. White 04.08.2012, 13:51
quelle
10

Actual std :: set und std :: map sind nicht wirklich sortiert. Beide Container sind als rot-schwarze Bäume implementiert. Wenn Sie also solche Container iterieren, durchläuft der Iterator den Baum so, dass der Container sortiert aussieht. Zuerst besucht es den linken Knoten und dann den Elternteil des linken und so weiter ...

    
Sergey Vystoropskyi 04.08.2012 23:49
quelle
6

Ja, std::set speichert seine Elemente so, dass das Iterieren über die Elemente in sortierter Reihenfolge erfolgt (und der Aufruf von std::adjacent_find zeigt an, dass std::set ebenfalls eindeutige Elemente speichert).

%Vor%

Live-Beispiel

    
TemplateRex 04.08.2012 14:00
quelle
2

C ++ 11 N3337 Standardentwurf 23.2.4 "Assoziative Container":

  

1 Assoziative Container ermöglichen das schnelle Abrufen von Daten basierend auf Schlüsseln. Die Bibliothek bietet vier grundlegende Arten von   Assoziative Container: set, multiset, map und multimap.

und:

  

10 Die grundlegende Eigenschaft von Iteratoren assoziativer Container besteht darin, dass sie durch die Container iterieren   in der nicht-absteigenden Reihenfolge der Schlüssel, wobei nicht-absteigend durch den Vergleich definiert ist, der verwendet wurde   konstruiere sie.

also ja, Bestellung ist garantiert, was als Ссылка grundsätzlich eine ausgewogene Suchbaumimplementierung erfordert.

Auch im Gegensatz zu C ++ 11 unordered_set , das eine bessere Leistung bieten kann, da es weniger Einschränkungen hat: Warum in aller Welt würde jemand set statt unordered_set verwenden? z Verwenden eines Hash-Sets.

    
quelle

Tags und Links