Pages

Affichage des articles dont le libellé est stdset. Afficher tous les articles
Affichage des articles dont le libellé est stdset. Afficher tous les articles

std::map std::set et autres arbres équilibrés sujet

vendredi 31 janvier 2014




Bonjour,

À chaque fois je me pose la question :
map et set sont implémentés "a priori" avec des arbres binaires, mais sont-ils équilibrés à chaque insertion/suppression ?

Où est-ce qu'on peut voir la liste des structures de données implémentées dans les diverses versions de la STL ?




std::set : Comparateur pour des arêtes sujet




Bonjour tout le monde,

J'ai souhaiterais avoir un std::set d'arêtes imposant l'unicité de celles ci. Je peux pas utiliser de pointeur dans ce cas de figure car je génère à la volée de nouvelles (ou non) arêtes.

Voici le squelette de ma classe arête:

Code:


class Edge
{
public:
  Edge(const std::shared_ptr<POINT> & p1, const std::shared_ptr<POINT> & p2) :
      m_p1(p1), m_p2(p2)
  {
  }
  virtual ~Edge()
  {
  }

  const std::shared_ptr<POINT> & p1() const
  {
    return m_p1;
  }

  const std::shared_ptr<POINT> & p2() const
  {
    return m_p2;
  }
private:
  std::shared_ptr<POINT> m_p1, m_p2;
};


J'ai essayé de faire un comparateur mais il ne fonctionne pas correctement:

Code:


struct EdgeCompare
{
  bool operator()(const Edge & e1, const Edge & e2) const
  {
    return e1.p1() < e2.p1() || e1.p2() < e2.p2();
  }
};


Mon but est de pouvoir supprimer une arête si celle-ci (ou son inverse) est déjà présente.

Ou est-ce que je me suis trompé?

Merci