std::map
не является хеш-таблицей. Обычно это реализовано в виде сбалансированного бинарного дерева. То, что вы хотите, это std::unordered_map
*.
А для std::unordered_map
C ++ определяет только значение хеш-функции для внутренних типов и общих **, таких как std::string
. Вам нужно реализовать хеш-функцию для struct { int16_t v[4]; };
самостоятельно. Вы можете преобразовать эту структуру в int64_t
в вычислениях, тогда не будет никакой разницы в скорости хеширования.
(*: == std::tr1::unordered_map
== boost::unordered_map
& asymp; __gnu_cxx::hash_map
== stdext::hash_map
и т. Д.)
(**: 20.8.16 Шаблон класса hash
: ... целочисленные типы (3.9.1), типы с плавающей точкой (3.9.1), типы указателей (8.3.1) и std::string
, std::u16string
, std::u32string
, std::wstring
, std::error_code
, std::thread::id
, std::bitset
и std::vector<bool>
.)