Set: Eigene Compare-Funktion
-
Hallo,
Wie der Titel schon sagt

Ich habe ein String-Set und möchte eine eigene Compare-Funktion statt des üblichen "less<>" oder "greater<>" verwenden, nur weiß ich leider nicht, wie.
Einfach:bool comp(string &s1, string &s2) { //.. tut halt vergleichen .. } // ... set<string, comp> s; // ...geht nicht wirklich.
Wie kann muß man solch eine Funktion definieren bzw. einbinden, damit es funktioniert ?
-
mach aus dem comp einen Operator, dann kannst du ihn als Template-Parameter übergeben:
class mycomp : public binary_function<bool,string,string> // oder so? { bool operator()(const string& left,const string& right) { return left.size()<right.size(); } } set<string,mycomp> myset;
-
es reicht:
class mycomp { bool operator()(const string& left,const string& right) const { return left.size()<right.size(); } } set<string,mycomp> myset;EDIT: const added
-
Funktioniert bestens. Danke!
-
Hallo,
es geht natürlich auch mit einer Funktion:bool comp(const std::string& s1, const std::string& s2) {...} // der zweite Parameter ist ein *Typ*... typedef std::set<std::string, bool (*)(const std::string&, const std::string&)> StrSet; // ... der bei der Instanstziierung mit einem Wert belegt werden muss. // Verwendet man einen Funktionstyp, muss man im Ctor die konkrete Funktion angeben. StrSet s(comp);