Ошибка: static_assert не удалось "Этот хэш работает только для типов перечисления" для unordered_multimap

Я пытаюсь вставить в

    unordered_multimap<pair<int, int>, int>

вот так:

    unordered_multimap<pair<int, int>, int> tree;

    auto firstPair=make_pair(firstNumber, secondNumber);

    tree.insert(make_pair(firstPair, 0));

Тем не менее, компилятор продолжает приветствовать меня со следующей ошибкой при компиляции:

      error: static_assert failed "This hash only works for enumeration types"

Теперь, после некоторого Google-фу и прочтения других вопросов ( этого и этого) здесь относительно этой ошибки, только с использованием unordered_map, я пришел к выводу, что мне нужно предоставить свою собственную хэш-функцию. Тем не менее, это сбивает с толку меня, так как другие вопросы, которые я прочитал, похоже, включают ключи, которые были пользовательскими (определяемыми пользователем) классами, и я не считаю тип ключа, который я использую, "обычаем". Если бы кто-нибудь мог дать представление об этом, я был бы очень признателен!

1 ответ

Решение

STL не определяет хеш-функцию для std::pair, Таким образом, вам нужно сделать то же самое, что вы сделали бы, если std::pair<int, int> был тип, который вы создали. Вы должны заявить о своей реализации std::hash,

Однако это не то, что я рекомендую. Вместо этого вам, вероятно, будет проще использовать карту карт: unordered_map<int, unordered_multimap<int, int>>,

Другие вопросы по тегам