STL set und das Suchen... [SOLVED]
-
hallo,
ich moechte in einem STL set (<set>) nach einem element suchen. nur ich hab leider nur ein objekt mit nicht allen attributen.
gibt es also eine moeglichkeit die vergleichsfunktion fuer das suchen zu beeinflussen?ich hoffe ihr versteht mich

danke im voraus!
-
Du kannst Dir die Vergleichsfunktion in Gestalt eines Funktors selber schreiben. Etwa so:
#include <iostream> #include <set> class Klasse { public: Klasse() : m_id(-1), m_x(3.14) {} Klasse( int id, double x ) : m_id(id), m_x(x) {} friend struct Comp; friend std::ostream& operator<<( std::ostream& out, const Klasse& k ) { return out << k.m_id << " " << k.m_x; } private: int m_id; double m_x; }; struct Comp { bool operator()( const Klasse& a, Klasse& b ) const { return a.m_id < b.m_id; } }; int main() { using namespace std; set< Klasse, Comp > s; s.insert( Klasse( 8, 1.23 ) ); s.insert( Klasse( 9, -3.265 ) ); set< Klasse, Comp >::iterator i = s.find( Klasse( 8, 0.0 ) ); // der 2.Parameter spielt keine Rolle if( i != s.end() ) cout << "Gefunden: " << *i << endl; return 0; }Im operator() von Comp wird definiert, welche Member der Klasse für den Vergleich hergenommen werden. Bedenke aber, dass in einem set keine zwei gleichen Elemente stehen können. Was gleich ist und was nicht, wird hier nur über Comp geregelt.
Gruß
Werner
-
hallo!
danke, eigentlich zu einfach.
diese Vergleichsfunktion hatte ich eh schon fuer die Sortierung. Dass diese ja auch auf die Suche zutrefft, daran hab ich gedacht!danke fuer die Hilfe

-
hephaistos6 schrieb:
hallo,
ich moechte in einem STL set (<set>) nach einem element suchen. nur ich hab leider nur ein objekt mit nicht allen attributen....
Das habe ich auch mal mit Verwunderung festgestellt: set sagt mir eigentlich nur, ob es ein identisches Objekt schon vorher gab ...
Gruß,
Simon2.
-
Simon2 schrieb:
Das habe ich auch mal mit Verwunderung festgestellt: set sagt mir eigentlich nur, ob es ein identisches Objekt schon vorher gab ...
Was sollte daran verwunderlich sein?

-
finix schrieb:
Simon2 schrieb:
Das habe ich auch mal mit Verwunderung festgestellt: set sagt mir eigentlich nur, ob es ein identisches Objekt schon vorher gab ...
Was sollte daran verwunderlich sein?

Irgendwie hatte ich das bis dahin (vor ca. 1 Jahr) anders (=falsch) verstanden ... so mehr wie einen "Kasten, in dem man herumsuchen kann" .... inzwischen habe ich festgestellt, dass (multi-)map meiner ursprünglichen Vorstellung eher entspricht.
Gruß,
Simon2.
-
Was spricht denn dagegen, in einer set<> zu suchen?
-
CStoll schrieb:
Was spricht denn dagegen, in einer set<> zu suchen?
... dass ich vorher genau das, was ich finden möchte, schon in der Hand haben muss. Damit habe ich nach der Suche nur die Information gewonnen, dass sich das Gesuchte schon vorher im set befand (oder eben nicht). Sobald ich mehr Information gewinnen möchte, kann ich natürlich Schlüssel und Daten in einer Klasse kapseln, die dann noch einen geeigneten Vergleichoperator anbietet ... oder eben gleich eine map nehmen, wenn ich zu einen Schlüssel die geeigneten Daten bestimmen (= vorher nicht wissen) möchte.
Gruß,
Simon2.