001
07.12.2004, 12:05 Uhr
~Th
Gast
|
Dazu solltest du die Vektoren beider Objekte sortieren und dann die Elemente miteinander vergleichen , also
C++: |
sort(vs.begin(), vs.end(), cmp); sort(t.vs.begin(), t.vs.end(), cmp);
if(vs.size() != t.vs.size()) return false; for(int i=0; i<vs.size(); i++) if(vs[i] != t.vs[i]) return false;
return true;
|
vs sollte kein Zeiger sein, also nur "vector< set<int> > vs;". Die Funktion cmp sollte in etwa so aussehen:
C++: |
bool cmp(const set<int>& s1, const set<int>& s2) const { return s1 < s2; }
|
Die Funktion verwendet einfach Vergleichsoperator "<" der Sets, da die sort-Funktion (evtl. <algorithm> einbinden) einen Vergleich mittels des logischen "kleiner als" benötigt.
Wenn du die Vergleichsoperation aber häufig aufrufst, solltest du die Sets schon beim Einfügen sortieren oder extra dafür eine Funktion schreiben.
Außerdem ist es immer gut typedefs für komplexe STL-Container zu verwenden, also z.B.
C++: |
typedef std::set<int> IntSet; typedef std::vector<IntSet> VecSet;
|
Dies erspart Tipparbeit und macht den Code übersichtlicher, insbesonder wenn man mit Iteratoren arbeit (habe ich jetzt hier zwar nicht verwendet, sollte aber eigentlich in der for-Schleife benutzt werden). |