Как написать хеш шаблона для std::pair ⇐ C++
Как написать хеш шаблона для std::pair
Я пытаюсь написать хэшер для std::pair. Кажется, у меня возникла ошибка, когда компилятор не видит хэш базового типа, но я не уверен. Вот код:
#include структура Point { std::pair координаты; }; структура PointHasher; структура Edge { std::pair pts; }; шаблон структура StdPairHasher { size_t оператор()(const std::pair& пара) const { const auto& first_hash = std::hash()(pair.first); // Ошибка return first_hash ^ (std::hash()(pair.секунда) + 0x9e3779b9 + (first_hash > 2)); } }; структура EdgeHasher { size_toperator()(const Edge& e) const { return StdPairHasher()(e.pts); } }; интервал основной() { std::unordered_set s; вернуть 0; } структура PointHasher { size_t оператор()(const Point& point) const { return StdPairHasher()(point.coords); } }; Ошибка в StdpairHash::operator()() (кроме того, я не уверен в расположении функций в этом одном файле):
1>ConsoleApplication9.cpp(20,46): ошибка C2064: термин не оценивается как функция, принимающая 1 аргумент 1>ConsoleApplication9.cpp(20,46): 1> контекст создания шаблона (сначала самый старый) 1> ConsoleApplication9.cpp(27,80): 1> см. ссылку на компилируемый экземпляр шаблона класса 'StdPairHasher' 1> ConsoleApplication9.cpp(18,12): 1> при компиляции функции-члена шаблона класса 'size_t StdPairHasher::operator ()(const std::pair &) const' 1> ConsoleApplication9.cpp(27,46): 1> см. первую ссылку на «StdPairHasher::operator ()» в «EdgeHasher::operator ()». 1>ConsoleApplication9.cpp(20,32): ошибка C2530: «first_hash»: ссылки должны быть инициализированы 1>ConsoleApplication9.cpp(21,16): ошибка C3536: «first_hash»: нельзя использовать до его инициализации 1>ConsoleApplication9.cpp(21,42): ошибка C2064: термин не оценивается как функция, принимающая 1 аргумент
Я пытаюсь написать хэшер для std::pair. Кажется, у меня возникла ошибка, когда компилятор не видит хэш базового типа, но я не уверен. Вот код:
#include структура Point { std::pair координаты; }; структура PointHasher; структура Edge { std::pair pts; }; шаблон структура StdPairHasher { size_t оператор()(const std::pair& пара) const { const auto& first_hash = std::hash()(pair.first); // Ошибка return first_hash ^ (std::hash()(pair.секунда) + 0x9e3779b9 + (first_hash > 2)); } }; структура EdgeHasher { size_toperator()(const Edge& e) const { return StdPairHasher()(e.pts); } }; интервал основной() { std::unordered_set s; вернуть 0; } структура PointHasher { size_t оператор()(const Point& point) const { return StdPairHasher()(point.coords); } }; Ошибка в StdpairHash::operator()() (кроме того, я не уверен в расположении функций в этом одном файле):
1>ConsoleApplication9.cpp(20,46): ошибка C2064: термин не оценивается как функция, принимающая 1 аргумент 1>ConsoleApplication9.cpp(20,46): 1> контекст создания шаблона (сначала самый старый) 1> ConsoleApplication9.cpp(27,80): 1> см. ссылку на компилируемый экземпляр шаблона класса 'StdPairHasher' 1> ConsoleApplication9.cpp(18,12): 1> при компиляции функции-члена шаблона класса 'size_t StdPairHasher::operator ()(const std::pair &) const' 1> ConsoleApplication9.cpp(27,46): 1> см. первую ссылку на «StdPairHasher::operator ()» в «EdgeHasher::operator ()». 1>ConsoleApplication9.cpp(20,32): ошибка C2530: «first_hash»: ссылки должны быть инициализированы 1>ConsoleApplication9.cpp(21,16): ошибка C3536: «first_hash»: нельзя использовать до его инициализации 1>ConsoleApplication9.cpp(21,42): ошибка C2064: термин не оценивается как функция, принимающая 1 аргумент
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение