недопустимые операнды, использующие c ++ unordered + map - PullRequest
0 голосов
/ 22 марта 2020

Постановка задачи

Учитывая массив целых чисел, вернуть индексы двух чисел так, чтобы они складывались до заданной c цели.

Вы можете Предположим, что у каждого входа будет только одно решение, и вы не можете использовать один и тот же элемент дважды.

enter image description here

Проблема:

Я пытаюсь реализовать алгоритм для этой проблемы, используя hashmap. Это первый раз, когда я использую хэш-карту, и я узнаю об этом. Я не уверен, почему я получаю следующую ошибку. Эта проблема из кода Leet. Заранее спасибо.

Line 10: Char 35: fatal error: invalid operands to binary expression ('int' and 'std::pair<const int, int>')
            if((target - nums[i]) == *umap.find(key))

Код

class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
            // key would be the element value would be the complement
            vector<int> sol;
            unordered_map<int,int> umap;
            for(int i=0; i<nums.size(); i++) 
            {
                int key = nums[i];
                if((target - nums[i]) == umap.find(key)) {
                    sol.push_back(i);
                    sol.push_back(umap[i]);
                } else {
                    umap[nums[i]] = i;
                    cout << umap[nums[i]]<< endl;
                }
            }
            return sol;
        }
    };

1 Ответ

0 голосов
/ 22 марта 2020

Функция find в std::unordered_map возвращает итератор для найденного элемента, если существует элемент с соответствующим ключом. Элемент, на который указывает итератор, это std::pair, содержащий ключ и значение. Поэтому, если вы хотите получить значение найденного элемента, вам нужно разыменовать итератор и взять значение second, выполнив umap.find(key)->second, что эквивалентно umap[key], если элемент с соответствующим ключом существует .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...