Ошибка: 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>>
,