Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » stl container ... h i l f e

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
07.12.2004, 11:10 Uhr
raphael



hallo!
ich versuche verzweifelt eine Lösung für folgendes Problem zu finden aber ich komme
einfach nicht weiter.
Also, ich brauche einen Vergleich für zwei Objekte der Klasse Test, der genau dann zu gleich auswertet, wenn in dem Vektor die gleichen Mengen enthalten sind. (ohne Berücksichtigung der Reihenfolge)
Also z.B. T1 = {[1,2],[2,3]} und T2= {[2,3],[1,2]}. Dann soll gelten T1==T2.


Code:
#include <set>
#include <vector>
using namespace std;


class Test{
  private:
  vector <set<int> > *vs;
  public:
      bool operator==(const Test &) const;
};

bool Test::operator==(const Test &t) const{
   bool erg;
   //wie???
   return erg;
}


int main(){
   //
}

Dieser Post wurde am 07.12.2004 um 11:10 Uhr von raphael editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
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).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.12.2004, 14:15 Uhr
raphael



Danke, ich probier das gleich mal!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: