Bonjour, je remercie par avance tous ceux qui s'intéresseront à mon problème. J'ai cherché une solution au problème suivant, j'en ai trouvé, aucune n'a marché. Le voici : j'implémente un algorithme de clustering et j'aurai besoin de stocker mes arêtes dans un ensemble qui n'accepte pas les doublons. Pour ce faire j'ai décidé d'utiliser un "unordered_set" . D'après le prototype de la fonction j'ai vu que je devais fournir une fonction de hachage pour mon objet Edge et aussi d'une fonction qui permet de tester l'égalité.

Voici l'une des nombres choses que j'ai testé :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template<typename T>
struct MyEdgeHash : public std::unary_function<std::edge<T>, size_t> {
   size_t operator()(const std::edge<T>& e) const
   {
      return hash(e.cost);
   }
};
 
template<typename T>
struct MyedgeEqual : public std::unary_function<std::edge<T>, bool> {
 
   bool operator()(const std::edge<T>& left, const std::edge<T>& right) const
   {
      return (left.vertex1 == right.vertex1 and left.vertex2 == right.vertex2) or (left.vertex1 == right.vertex2 and left.vertex2 == right.vertex1);
   }
}; 
typedef unordered_set<edge<Edge>, MyEdgeHash<Edge>, MyedgeEqual<Edge>> Graph;
Je suis débutant en C++ j'ai essayé d'adapter à mon problème une solution que j'ai trouvé sur le net mais j'obtiens des erreurs du style "extra qualification 'Edge'::on member operator ==

Pourtant j'ai trouvé partout qu'il fallait redéfinir cet opérateur alors je perds un espoir. Merci de votre aide.