Kysymyksenä on luokan sisälle ohjelmoitu vertailuoperaattori. Tämä on helppoa, jos tehdään vain yksi vertailuoperaattori, mutta homma menee hankalaksi, koska haluan kuitenkin järjestellä oliovektorin ainakin kahdella eri tavalla.
class Jasen{ private: string nimi; string osoite; int ika; public: Jasen(string n, string o, int i){ this -> nimi = n; this -> osoite = o; this -> ika = i; } bool operator < (const Jasen &i)const{ return (nimi < i.nimi); } //Miten tehdään toinen tällainen? };
Jos käytät STL:n vectoreita, viimeinen esimerkki seuraavalta sivulta:
http://www.cppreference.com/cppalgorithm/sort.
Jep noin se on nyt mun projektissa, mutta eikö ole mahdollista liittää luokkaan kuin yksi ylimäärittely? Ei se tietenkään haittaa, että tuo vertailufunktio on ulkopuolinen. Olisi vaan jotenkin selkeämpää, jos vertailut olisivat luokann sisällä.
No mistähän se kääntäjä tietää, minkä vertailun mukaan pitää vastata, kun kysytään, onko a < b? Ei mistään. Ei voi olla kuin yksi tuollainen operaattori tietylle tyyppiparille. Voit kuitenkin tehdä vertailufunktiosta staattisen jäsenen:
class A { int a, b; public: static inline bool cmp_a(A const &a1, A const &a2) { return a1.a < a2.a; } static inline bool cmp_b(A const &a1, A const &a2) { return a1.b * a1.b < a2.b * a2.b; } }; sort(va.begin(), va.end(), A::cmp_a); sort(vb.begin(), vb.end(), A::cmp_b);
Aihe on jo aika vanha, joten et voi enää vastata siihen.