Вы можете просто использовать пользовательский функтор в объявлении unordered_map
.
Действительно, unordered_map
предоставляет для этого специальные аргументы шаблона.
Примечание : вам нужно предоставить функтор для вычисления значения хеша также для unordered_map
.
template<
class Key,
class T,
class Hash = std::hash<Key>, // <----- You need hash for Key
class KeyEqual = std::equal_to<Key>, // <---- Equal Functor
// ...
Просто определите ваш функтор в соответствии с логикой вашей программы.Что-то вроде:
struct AsnObjectIdentifierHasher {
std::size_t operator()(const AsnObjectIdentifier&) const noexcept;
};
struct AsnObjectIdentifierComparator {
bool operator()(const AsnObjectIdentifier&,
const AsnObjectIdentifier&) const noexcept;
};
template <typename T>
using HashMap = std::unordered_map<AsnObjectIdentifier,
T,
AsnObjectIdentifierHasher,
AsnObjectIdentifierComparator>;
Я настоятельно не рекомендую использовать free-function для реализации арифметических и логических операторов (особенно, когда интерфейс STL обеспечивает настройку посредством аргументов шаблона), Функторы (функциональные объекты) обеспечивают лучший код изоляции и позволяют избежать проблем с областью действия (например, ADL).