C ++ unordered_set de vecteurs

Puis-je créer un unordered_set de vecteurs en C ++? quelque chose comme ça

std::unordered_set<std::vector> s1; 

parce que je sais que c’est possible avec la classe “set” de la bibliothèque std mais semble que cela ne fonctionne pas pour la version non ordonnée merci

Mise à jour: c’est exactement le code que j’essaie d’utiliser

 typedef int CustomerId; typedef std::vector Route; typedef std::unordered_set Plan; // ... in the main Route r1 = { 4, 5, 2, 10 }; Route r2 = { 1, 3, 8 , 6 }; Route r3 = { 9, 7 }; Plan p = { r1, r2 }; 

et tout va bien si j’utilise set, mais je reçois une erreur de compilation lorsque j’essaie d’utiliser la version non ordonnée

 main.cpp:46:11: error: non-aggregate type 'Route' (aka 'vector') cannot be initialized with an initializer list Route r3 = { 9, 7 }; 

Sûr que vous pouvez. Vous devrez cependant trouver un hachage, car celui par défaut ( std::hash> ) ne sera pas implémenté. Par exemple, sur la base de cette réponse , nous pouvons construire:

 struct VectorHash { size_t operator()(const std::vector& v) const { std::hash hasher; size_t seed = 0; for (int i : v) { seed ^= hasher(i) + 0x9e3779b9 + (seed<<6) + (seed>>2); } return seed; } }; 

Et alors:

 using MySet = std::unordered_set, VectorHash>; 

Vous pouvez également, si vous le souhaitez, append une spécialisation à std::hash pour ce type ( notez que ce comportement peut être indéfini avec std::vector , mais convient parfaitement avec un type défini par l’utilisateur ):

 namespace std { template <> struct hash> { size_t operator()(const vector& v) const { // same thing } }; } using MySet = std::unordered_set>;