используя unordered_set пользовательский хеш и найти - PullRequest
0 голосов
/ 20 января 2019

У меня есть хеш-функция для моего unordered_set, и я хочу использовать функцию поиска набора, но я получаю ошибку. Как я могу использовать функцию поиска набора с помощью пользовательской хеш-функции?

Я хотел сохранить пару в неупорядоченном множестве, и для этого у меня есть простая хеш-функция, и я просто попытался использовать функцию поиска, и это выдает ошибку. Ниже приведена ошибка:

solution.cpp: в функции-члене anagramMappings Строка 22: символ 33: ошибка: нет соответствующей функции для вызова 'std :: unordered_set, Solution :: SimpleHash> :: find (__ gnu_cxx :: __ alloc_traits, int> :: value_type &)' it = mySet.find (A [i]); ^

struct SimpleHash {
    size_t operator()(const std::pair<int, int>& p) const {
    return hash<int>()(p.first) ^ hash<int>()(p.second);
    }
};

vector<int> anagramMappings(vector<int>& A, vector<int>& B) {

    vector<int> res;
    unordered_set<pair<int,int>, SimpleHash> mySet;
    unordered_set<pair<int,int>, SimpleHash>::iterator it;

    for(int i=0; i < B.size(); i++) {
        mySet.insert(make_pair(B[i],i));
    }

    for(int i=0; i<A.size(); i++) {

        it = mySet.find(A[i]);
        if(it != mySet.end()) {
            res.push_back(it->second);
        }
    }

    // for(it = mySet.begin(); it != mySet.end(); it++) {
    //     cout << it->first << " " << it->second << endl;
    // }

    return res;
}

Когда используется mySet.find (ключ), он должен вернуть первый элемент пары

1 Ответ

0 голосов
/ 20 января 2019

unordered_set<T>::find() хочет T в качестве аргумента - в данном случае, pair<int, int>. Вы передаете один int.

Вместо этого вы можете рассмотреть std::unordered_map, так как кажется, что вы хотите трактовать один int как ключ поиска, а другой - как значение, связанное с этим ключом.

...