Es scheint, dass ich ein std :: vector < std :: pair < int, std :: string > > sortieren kann, und es wird basierend auf dem int-Wert sortieren. Ist das eine gut definierte Sache? Hat std :: pair eine Standardreihenfolge basierend auf seinen Elementen?Ist std :: pair <int, std :: string> wohldefiniert?
Antwort
std::pair
verwendet lexikographischen Vergleich: Es wird basierend auf dem ersten Element zu vergleichen. Wenn die Werte der ersten Elemente gleich sind, wird es basierend auf dem zweiten Element verglichen.
der Definition im Standard 03 ++ C (Abschnitt 20.2.2) ist:
template <class T1, class T2>
bool operator<(const pair<T1, T2>& x, const pair<T1, T2>& y);
Returns: x.first < y.first || (!(y.first < x.first) && x.second < y.second).
Der Vergleichsoperator. Es verwendet einen lexikographischen Vergleich: Der Rückgabewert ist wahr, wenn das erste Element von x kleiner ist als das erste Element von y, und falsch, wenn das erste Element von y kleiner ist als das erste Element von x. Wenn keiner von beiden der Fall ist, gibt der Operator < das Ergebnis des Vergleichs der zweiten Elemente von x und y zurück. Dieser Operator darf nur verwendet werden, wenn sowohl T1 als auch T2 LessThanComparable sind. Dies ist eine globale Funktion, keine Elementfunktion.
Sieht aus wie es ist eigentlich eine Kombination aus beiden Elementen.
Nach meiner Kopie des C++ 0x-Standard, Abschnitt 20.3.3.26 hat std::pair
ein operator<
so definiert, dass für zwei Paare x und y, es gibt
x.first < y.first || (!(y.first < x.first) && x.second < y.second)
Ich bin nicht sicher, ob Dies ist Teil des Standards von 2003. Ich sollte auch beachten, dass dies nicht kompiliert wird, wenn die Elemente selbst nicht LessThanComparable sind.
Ja. operator<()
ist für std::pair<T1, T2>
definiert, unter der Annahme, dass sowohl T1
als auch T2
selbst vergleichbar sind.
- 1. Fehler: keine Übereinstimmung für 'operator []' (Operandentypen sind 'std :: list <std :: pair <int, int>> *' und 'std :: pair <int, int>')
- 2. std :: copy std :: cout für std :: pair
- 3. finden Sie in Std :: Vektor <std::pair>
- 4. Ein std :: pair einbinden
- 5. Warum ist std :: pair schneller als std :: tuple
- 6. C++ std :: pair, std :: vector & memcopy
- 7. std :: pair <int, int> vs struct mit zwei int
- 8. Übereinstimmend eine Sequenz von zwei Ganzzahlen in ein `std :: pair <int, int>`
- 9. Erstellen einer std :: unordered_map mit einem std :: pair als Schlüssel
- 10. ‚struct std :: pair <int, int>‘ hat kein Mitglied namens ‚push_back‘
- 11. 'struct std :: pair <int, int>' hat kein Mitglied namens 'serialize'
- 12. Gibt es sowas wie std :: tie für std :: pair?
- 13. Boost.Python Umwandlung Python Tupels `std :: tuple` oder` std :: pair`
- 14. emplace_back arbeitet nicht mit std :: vector <std :: map <int, int>>
- 15. Zuweisen von std :: function <int(int)> zu std :: function <const int & (const int & x)>
- 16. Wie initialisiere ich ein const std :: pair?
- 17. std :: mit std :: make_pair
- 18. Wie man zwei std :: vector in einen einzigen std :: vector mit std :: pair kombiniert
- 19. Forcing std :: Tupel zu enthalten std :: pair <fester_Typ, T>
- 20. erstellen std :: pair oder std :: map mit std :: unique_ptr als Wert implizit
- 21. Wie fügt man ein Paar std :: pair in ein anderes std :: pair ein?
- 22. Was ist der Unterschied in der Leistung von Std :: Set <Paar <int,int>> und Std :: Map <int,int>
- 23. Warum löscht std :: map < std::map > Speicher nicht?
- 24. Initialisierung std :: auto_ptr: "Fehler: keine Übereinstimmung für den Aufruf von '(Std :: Auto_ptr <int>) (Int *)'"
- 25. Warum hat nicht std :: pair Iteratoren?
- 26. Wie man eine sortierte std :: list von std :: pair in eine std :: map konvertiert
- 27. konvertieren int std :: string
- 28. std :: vector <std :: vector <int>> push_back gibt Heap-Pufferüberlauf
- 29. std :: make_shared mit std :: initializer_list
- 30. keine passende Funktion für Aufruf von ‚merge (std :: vector <int> & std :: vector <int> &)