000
11.12.2009, 21:36 Uhr
Lotec
|
Hallo Leute,
ich möchte Folgendes machen: eine Klasse, die std::string name hat. Ist quasi ein Knoten eines gerichteten Graphen. Die anderen Knoten werden mit dem Knoten verbunden, indem die Zeiger auf entsprechende Objekte in der Klasse gespeichert werden. Nun ist mir wichtig schnell prüfen zu können, ob der Knoten einen Sohn mit einem bestimmten Namen hat. Dafür lege ich die Zeiger in std::map ab. Ich weiß aber nicht, wie ich den operator< überladen soll, ich speichere schließlich Zeiger, und sortiert sollte es nach Namen. Ich hab Verschiedenes versucht, aber nichts hat funktioniert. Mein letzter Einsatz war die Zeiger in einer inneren Klasse zu kapseln, aber es produziert nur noch unlesbare Fehlermeldungen.
C++: |
#ifndef __X__ #define __X__
#include <string> #include <set>
using namespace std;
class X { private: const string name;
public: class XPointer { public: const X* x;
XPointer(const X* x_) : x(x_) { }
bool operator<(const XPointer& rhs) { return x->getName() < rhs.x->getName(); }
bool operator==(const XPointer& rhs) { return x->getName() == rhs.x->getName(); }
};
private: set<XPointer> children; public: X(const string& name_) : name(name_) { } string getName() const { return name; }
void insert(X* x) { children.insert(XPointer(x)); } };
#endif
|
Hat jemand vielleicht eine Idee, wie man das elegant lösen kann? Dieser Post wurde am 11.12.2009 um 21:39 Uhr von Lotec editiert. |