[gelöst]pair und Kleiner Gleich
-
Hallo,
hier mal wieder eine typische Anfängerfrage, die ich versucht habe im Internet mir selbst zu beantworten, allerdings finde ich mal wieder 15 Antowrten, die teilweise anderes behaupten:
typedef std::pait<short, short> test; main () { test(0,0) < test(1,1) ? test(0,1) < test(1,1) ? test(0,2) < test(1,1) ? test(1,0) < test(1,1) ? test(1,1) < test(1,1) ? test(1,2) < test(1,1) ? test(2,0) < test(1,1) ? test(2,1) < test(1,1) ? test(2,2) < test(1,1) ? }Wann ist der Vergleichsoperator bei pair mit Kleiner erfüllt? Ich hab versucht aus der Doku schalu zu werden, allerdings weiß ich ehrlich gesagt nicht so ganz in welche Doku ich schauen muss. Ich habs mit Google versucht und bin auf diverse Internetseiten gekommen, allerdings geht aus kener hervor, wann denn nun ein pair<> kleiner ist als das andere? Wenn ein Wert kleiner ist, wenn beide kleiner sind, wenn einer kleiner ist und der andere nicht größer ist?
Folglich zwei Fragen?
Wie sind die Vergleichoperatoren bei pair<> definiert?
Wo kann ich (in Zukunft) nachlesen, wie diese definiert sind (auch für andere Container)?Ich weiß es ist newbee, aber glaubt mir, ich würde hier nicht fragen, wenn nicht so viel verschiedene Meinungen im Internet stehen würden. (Da kann man aber auch unsicher werden....)
Danke,
Stefan
-
Zitat cplusplus.com:
The header <utility> also overloads the relational operators ==, <, !=, >, >= and <= , so as to be able to compare pair objects of the same type directly:
Two pair objects are compared equal if the first elements in both objects compare equal to each other and both second elements compare equal to each other - they all have to match.
In inequality comparisons (<, >), only the first element is compared, except if both first elements compare equal to each other, in this case only the second element is taken into consideration for the comparison operation.
-
Hmm, google? Erster Hit bei std::pair <:
[quote src=http://www.sgi.com/tech/stl/pair.html]template <class T1, class T2>
bool operator<(const pair<T1,T2>& x,
const pair<T1,T2>& y);The comparison operator. It uses lexicographic comparison: the return value is true if the first element of x is less than the first element of y, and false if the first element of y is less than the first element of x. If neither of these is the case, then operator< returns the result of comparing the second elements of x and y. This operator may only be used if both T1 and T2 are LessThanComparable. This is a global function, not a member function. [/quote]
-
So Sachen können ja einfach direkt an der Quelle nachgeschaut werden:
ISO/IEC14882 : 20.2.2/6 schrieb:
template <class T1, class T2>
bool operator<(const pair<T1, T2>& x, const pair<T1, T2>& y);
6 Returns: x.first < y.first || (!(y.first < x.first) && x.second <
y.second).
-
OK, google, hmm? Naja, wenn man wieder mal die passenden Suchbegriffe hat. Schon verstanden. Hab wahrscheinlich wieder mal zu kompliziert oder zu einfach gesucht.
Ich vermute mal, die Antwort auf meine zweite Frage ist: http://cplusplus.com
Danke,
Stefan
-
Wenn du wirklich auf Nummer sicher gehen willst, dann schaust du im Standard nach.
Obwohl natürlich die Referenz grundsätzlich genügen sollte.
-
drakon schrieb:
Wenn du wirklich auf Nummer sicher gehen willst, dann schaust du im Standard nach.
Obwohl natürlich die Referenz grundsätzlich genügen sollte.Um wirklich sicher zu gehen musst Du allerdings in Deiner Implementierung nachsehen.
-
templäd schrieb:
drakon schrieb:
Wenn du wirklich auf Nummer sicher gehen willst, dann schaust du im Standard nach.
Obwohl natürlich die Referenz grundsätzlich genügen sollte.Um wirklich sicher zu gehen musst Du allerdings in Deiner Implementierung nachsehen.
Bei pair<short, short> sollte ich mich glaube ich auf die Implementierung der std verlassen können. Klar, wenn ich eigene Klassen schreibe und die ins Pair stecke, dann liegts wieder an meinem "operator<" und "operator=".
Und bei Microsoft habe ich im pair<>-Handbuch nun auch die gleiche Aussage von cplusplus.com gefunden: Erst der erste Wert, wenn der gleich ist, der zweite Wert.Wenn man weiß, wonach man eigentlich sucht, dann findet man es auch. (Noch zum Thema google und so...*g*)