У меня есть структура, называемая Point. Точка довольно проста:
struct Point
{
Row row;
Column column;
// some other code for addition and subtraction of points is there too
}
Row
и Column
в основном прославлены int
s, но мне стало неловко переносить входные аргументы в функции и давал им каждый класс-оболочку.
Сейчас я использую set
точек, но повторные поиски действительно замедляют работу. Я хочу переключиться на unordered_set
.
Итак, я хочу иметь unordered_set
of Point
s. Обычно этот набор может содержать, например, каждую точку на терминале 80x24 = 1920 точек. Мне нужна хорошая хэш-функция. Я просто придумал следующее:
struct PointHash : public std::unary_function<Point, std::size_t>
{
result_type operator()(const argument_type& val) const
{
return val.row.value() * 1000 + val.col.value();
}
};
Однако я не уверен, что это действительно хорошая хеш-функция. Я хотел что-то быстро, так как мне нужно очень быстро сделать много поисков. Есть ли лучшая хеш-функция, которую я могу использовать, или это нормально?