У меня есть пользовательская функция ha sh для unordered_set векторов :
struct VectorHash {
int operator()(const vector<int> &V) const {
int hsh=V[0] + V[1];
return hash<int>()(hsh);
}};
И для двух таких векторов у меня один и тот же ха sh равен 3:
vector<int> v1{2,1};
vector<int> v2{1,2};
Но когда я пытаюсь вставить первый вектор v1 в unordered_set, а затем проверить, есть ли у меня такой же вектор на ha sh, как v2 в моем unordered_set, я получаю false:
std::unordered_set<std::vector<int>, VectorHash> mySet;
mySet.insert(v1);
if(mySet.find(v2) == mySet.end())
cout << "didn't find" << endl;
Output: "didn't find"
Я предполагаю, что если два элемента в unordered_set имеют одинаковое значение ha sh, то если у меня есть v1 в моем unordered_set, метод find
должен возвращать true, когда я пытаюсь найти v2. Но это не тот случай.
Может ли кто-нибудь объяснить мне, что не так в моих рассуждениях?