Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » ein kleines Problem mit std::map

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
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.12.2009, 21:46 Uhr
0xdeadbeef
Gott
(Operator)


Üblicherweise gibt man std::map dafür einen Vergleichsfunktor mit, etwa

C++:
struct ptr_less {
  template<typename ptr_t>
  bool operator()(ptr_t const &lhs,
                  ptr_t const &rhs) const {
    return *lhs < *rhs;
  }
};

// ...

std::map<key_pointer_t, value_t, ptr_less> my_map;


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 11.12.2009 um 21:48 Uhr von 0xdeadbeef editiert.
 
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: