Соответствующий бит ошибки:
candidate function not viable: no known conversion from
'std::pair' to
'const std::unordered_map, std::equal_to, std::allocator > >::key_type'
(aka 'const int')
for 1st argument operator[](const key_type& __k)
Итак, что это значит, когда при использовании оператора индекса в umap[*i] == 1
тип *i
равен std::pair
и тип, который оператор ожидает const int
(посмотрите на «aka»).
Это потому, что итераторы карты возвращают std::pair
, содержащую ссылку на данные ключа и к данным стоимости. Вы можете легко получить данные о значении просто из итератора, не вызывая оператор индекса:
if (i->second == 1)
return i->first;
Однако, как указано в комментариях, вам не нужен дополнительный контейнер для решения этой головоломки. Ограничение "Не могли бы вы реализовать это без использования дополнительной памяти?" на самом деле намек на решение. Существует математическое свойство в непустом массиве целых чисел, где каждый элемент появляется дважды (!), За исключением одного.
Кроме того, я Рекомендую использовать имя переменной i
для индексов и вызова итераторов it
, но это всего лишь личное предпочтение.