Так как C ++ 11 , вы также можете использовать std::unordered_map
, так как он вполне соответствует вашим требованиям:
Неупорядоченная карта - это ассоциативный контейнер, содержащий пары ключ-значение с уникальными ключами. Поиск, вставка и удаление элементов имеют среднюю сложность с постоянным временем.
Чтобы объединить ваши int
и void*
в одну клавишу, вы можете использовать std::pair
.
Чтобы неупорядоченная карта работала с парой, вы должны указать подходящую хеш-функцию. Чтобы сохранить следующий пример коротким, я использую комбинацию ручной функции std::hash<>
вызовов функций внутри лямбда-выражения . В случае, если эта функция вызывает проблемы с производительностью, вы можете создать более сложный хеш.
Вы не указали содержание своих векторов, поэтому я выбрал int
для простоты. Однако вы можете адаптировать решение к любому векторному контенту. В целом ваш код может выглядеть следующим образом:
using Key = std::pair<int, void*>;
auto hash = [](const Key & k) {
return std::hash<int>()(k.first) * 31 + std::hash<void*>()(k.second);
};
std::unordered_map<Key, std::vector<int>, decltype(hash)> um(8, hash);
Код на Ideone