Вместо карты вы можете использовать набор, когда значение и ключ не разделены.
Вместо мультимножества / -карты вы можете использовать не мульти-версию, которая не хранит дубликаты.
Вместо набора у вас есть std::unordered_set
в качестве альтернативы. Это может быть быстрее для вашего случая использования.
Существуют и другие, менее общие структуры данных, которые можно использовать для представления наборов целых чисел, и некоторые из них могут быть более эффективными в зависимости от варианта использования. Но эти другие структуры данных не обязательно предоставляются вам стандартной библиотекой.
Но мне не ясно, у кого самый быстрый поиск.
Неупорядоченный набор имеет лучшую асимптотическую сложность для поисков, чем упорядоченный. Быстрее ли это для вашего случая использования, вы можете узнать, измерив.
вряд ли превысит тысячу или около того
В этом случае асимптотическая сложность не обязательно актуальна.
Специально для таких небольших наборов отсортированный вектор может быть весьма эффективным. Учитывая, что вы «не будете вставлять или удалять какие-либо значения» , вектор также не должен иметь существенных недостатков. Стандартная библиотека не предоставляет контейнер набора, реализованный внутри с использованием отсортированного вектора, но она обеспечивает контейнер вектора, а также все необходимые алгоритмы.
Я не знаю, как контейнеры вычисляют хэши.
Вы можете предоставить хеш-функцию для неупорядоченного контейнера. По умолчанию используется std::hash
. std::hash
использует хеш-функцию, определенную реализацией.