boost::tuple<A,B,C> vergleichen mit B als Key?
-
Wie schreibe ich einen Komparator für ein boost::tuple<A,B,C>, wobei nach B sortiert werden soll (ein operator < für B existiert bereits)?
-
Warum geht folgendes nicht?
bool operator< (const boost::tuple<A,B,C>& t1, const boost::tuple<A,B,C>& t2) {return get<1>(t1) < get<1>(t2);}error C2804: binary 'operator <' has too many parameters
-
ok, die Funktion war in einer Klasse, und es hat ein friend gefehlt.
-
Was soll das denn, einen zweiten operator< für tuple zu definieren?
Benenn die Funktion doch gefälligst anständig (z.B. compare_second). Beim Aufruf von std::sort kann die Funktion dann angegeben werden.
-
template<typename A, typename B, typename C> bool operator< (const boost::tuple<A,B,C>& t1, const boost::tuple<A,B,C>& t2) {return boost::get<1>(t1) < boost::get<1>(t2);}Aber ich halte das für eine sehr schlechte Idee, die Funktion operator< zu nennen, wenn man weiß, dass es eine solche Funktion schon in einer anderen Headerdatei gibt, die mit dieser Klasse assoziiert ist. Das verwirrt Leute, die deinen Code lesen, weil sie dann auf den ersten Blick das normale < vermuten und es kommt leicht zu Fehlern, falls sie selber den Boost-Header mit den Vergleichsoperatoren einbinden.