Как написать хеш шаблона для std::pairC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как написать хеш шаблона для std::pair

Сообщение Anonymous »


Я пытаюсь написать хэшер для 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 аргумент
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»