Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Sortierungsproblem im Set

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
28.11.2006, 23:49 Uhr
~ganzVerzweifelt
Gast


Hallo Gemeinde,
habe folgendes Problem:
Eine Klasse B hat einen set<A*> mit Zeiger auf Objete von der Klasse A.
Nun will ich aber eine spezielle Anordnung von A-Objekten im Set implementieren. Eigentlich kann man das so machen:


Code:
Class A
{}

Class B
{
struct Com
{
   bool operator()(const A* i, const A* j) const
   {
     return ... // do compare
   }
}

std::set<A*,Com>;
}

So weit würde das funktionieren. Aber das Problem ist, dass ist in der Funktion operator() auf die Klasse B selbst zugreifen muss, d.h. z.B.


Code:
Class B
{
struct Com
{
   bool operator()(const A* i, const A* j) const
   {
     return getSomeProperty(i) < getSomeProperty(j);
   }
}

int getSomeProperty(const A* i) const
{ return ..//some property of i }

std::set<A*,Com>;
}

und das geht natürlich nicht, da getSomeProperty nicht statisch ist und in Com nicht sichtbar. Aus Designgründen kann ich die Referenz auf B in A nicht speichern (so dass ich auf B-Objekt über A zugreifen kann.
Kann man das irgendwie lösen?
Kann man bei der Deklaration von set anstatt von Com eine boolesche Funktion von B irgendwie übergeben? Dann könnte sie nähmlich auf die lokale Datenstrukturen zugreifen.
Irgendwie sowas:


Code:
Class B
{
  bool compare(const A* i, const A* j) const
  {
    return getSomeProperty(i) < getSomeProperty(j);
  }

int getSomeProperty(const A* i) const
{ return ..//some property of i }

std::set<A*,[b]compare[/b]>;
}


Aber das geht ja so nicht... Hat jemand eine Lösund?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
29.11.2006, 12:22 Uhr
kronos
Quotenfisch
(Operator)


Kannst doch einfach direkt aus B 'ne Funktor-Klasse machen...?
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
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: