lexikographisches Ordnen
-
ich dachte eher an sowas wie lexicographical_compare<TYPE::m1, TYPE::m2>(TYPE a, TYPE b) {...}
-
mit
struct TYPE {T2 m1; T2 m2};
-
uuuuuuu schrieb:
Member lexikographisch sortiert?
member sortieren. hää?
-
Der Instanzen der Klassen anhand ihrer Member lexikographisch sortiert.
-
DAS hab ich auch sofort gedacht ...
-
class foo { private: int a; double b; short c; float d; };so schön sortiert

-
uuuuuuu schrieb:
Ich habe eine Klasse mit Membern, für die jeweils ein operator < definiert ist.
Wie kann ich -- ohne groß zu programmieren -- einen operator < für die ganze Klasse schreiben, der ihre Member lexikographisch sortiert?
Evtl kannst Du Dir zunutze machen, dass Tupel das schon mitbringen
#include <tuple> #include <cassert> struct Foo{ int i; int j; bool operator<(const Foo& f) const { return std::make_tuple(i,j) < std::make_tuple(f.i, f.j); } }; int main(){ assert( (Foo{0,0} < Foo{0, 1}) ); assert( !(Foo{0,0} < Foo{0, 0}) ); assert( !(Foo{0,0} < Foo{0,-1}) ); assert( !(Foo{1,0} < Foo{0, 1}) ); assert( !(Foo{1,0} < Foo{0, 0}) ); assert( !(Foo{1,0} < Foo{0,-1}) ); assert( (Foo{-1,0} < Foo{0, 1}) ); assert( (Foo{-1,0} < Foo{0, 0}) ); assert( (Foo{-1,0} < Foo{0,-1}) ); }
-
Hier siehst du ein Beispiel dazu, wie man std::tuple verwenden kann: http://en.cppreference.com/w/cpp/utility/tuple/tie
-
uuuuuuu schrieb:
mit
struct TYPE {T2 m1; T2 m2};bool operator<(TYPE const& a, TYPE const& b) { if (a.m1 < b.m1) return true; if (b.m1 < a.m1) return false; // die m1 elemente sind äquivalent // --> also nach m2 sortieren return a.m2 < b.m2; }
-
Michael E. schrieb:
Hier siehst du ein Beispiel dazu, wie man std::tuple verwenden kann: http://en.cppreference.com/w/cpp/utility/tuple/tie

-
Ich nochmal: Mit VC++2012 funktioniert das nicht, wenn man viele (7) Argumente hat. Wie muss ich die <tuple> header verändern?
-
Das dürfte die Beschränkung von variadic templates in Visual Studio sein. VTs sind dort ein Makrohack. In VC++11 ist das Limit meines Wissens nach 5. Es gibt aber einen Schalter um das zu erhöhen. *kurz Google benutz* Der Schalter heißt _VARIADIC_MAX. Aber auch dieser hat ein Maximum von 10.
-
Danke

-
SeppJ schrieb:
Der Schalter heißt _VARIADIC_MAX. Aber auch dieser hat ein Maximum von 10.
Maximum von 10?

-
pyhax schrieb:
SeppJ schrieb:
Der Schalter heißt _VARIADIC_MAX. Aber auch dieser hat ein Maximum von 10.
Maximum von 10?

Ist das überhaupt Standardkonform?
N3337 B - Implementation quantities schrieb:
— Template arguments in a template declaration [1 024].
So wie es aussieht, nein (oder es gibt irgendwo extra eine Begrenzung für variadic-templates, aber das würde IMO keinen Sinn machen).