"<"-Operator überladen
-
LordJaxom schrieb:
Alternativ könnte die Überladung von ::operator<(Key *a, Key *b) klappen...
unwahrscheinlich, daß der compiler das zuläßt. wenn man damit anfängt, kommt motgen einer und überlädt den op< für integers.
-
Stimmt, geht nicht... War davon abgesehen ein unschöner Vorschlag

-
Hallo nochmal,
hab jetzt mal versucht, euren Vorschlag
bool operator<(const Key& compKey) { if (strcmp(key, compKey.getKey()) < 0) return true; else return false; }bei mir einzubauen, aber meinem Compiler hat das überhaupt nicht gefallen ("Übergabe als this-Argument streicht Qualifizierer", oder so ähnlich). Jetzt habe ich festgestellt, dass das Problem offensichtlich darin liegt, dass die Variable "key", die klassenintern den Hash-Wert speichert, bei mir privat ist, und ich darauf per "getKey()" zugreife. Wenn ich sie dagegen public deklariere und innerhalb des Operators direkt darauf zugreife, funktioniert alles:
strcmp(key, compKey.key)Allerdings hätte ich schon gerne, dass man den Wert von außen nicht ohne weiteres ändern kann. Gibt's da vielleicht einen Weg?
Vielen Dank aber schon jetzt für eure Hilfe, das hat mich schon jetzt sehr viel weiter gebbracht...
-
class Key { ... private: char *key; ... public: bool operator<(const Key &t_key) { return strcmp(key, t_key.key) < 0 ? true : false; } ... };mein compiler macht da keinen stress.
Meep Meep
-
Hm, hab wohl gedacht, dass
compKey.keyhier nicht gehen würde, weil "compKey" eine andere Instanz sei und man deshalb von hier aus nicht auf deren private variable "key" zugreifen könne.
Tja, und ich dachte, ich hätte alles ausprobiert... So läuft es jedenfalls bei mir auch. Vielen Dank nochmal an alle, ist ein wirklich tolles Forum!!
-
Meep Meep schrieb:
class Key { ... private: char *key; ... public: bool operator<(const Key &t_key) { return strcmp(key, t_key.key) < 0 ? true : false; } ... };mein compiler macht da keinen stress.
Meep Meep
sollte er auch nicht. allerdings gibt es keinen grund, dass dieser operator non-const ist. und auf das
x?true:falseidiom können wir nun wirklich verzichten

-
camper schrieb:
und auf das
x?true:falseidiom können wir nun wirklich verzichten

stimmt.
es mussreturn !!(strcmp(key, t_key.key) < 0);heißen.
-
Warum nicht
return !((strcmp(key, t_key.key) < 0) ? false : true)
-
LordJaxom schrieb:
Warum nicht
return !((strcmp(key, t_key.key) < 0) ? false : true)weil es nicht notwendig ist, das zweimal zu machen.
-
Achso, verstehe
