Каков самый быстрый способ выяснить, имеет ли контейнер unordered_map
элемент с указанным ключом?
Unordered_map: какой из них быстрее find() или count()?
Ответ 1
Они будут иметь одинаковую производительность. Вы должны использовать алгоритм, который лучше всего выражает то, что вы пытаетесь сделать.
Чтобы уточнить это, обычно count()
будет реализован с помощью find()
. Например, в libcxx count()
реализуется как return (find(__k) != end());
Ответ 2
Я думаю, что Find - лучший вариант здесь, не нужно идти дальше.
http://www.cplusplus.com/reference/unordered_map/unordered_map/find/
Ответ 3
find()
и count()
применимы ко многим контейнерам на С++.
Для карт, множеств и т.д. find всегда будет иметь постоянное время выполнения, так как он просто вычисляет хэш и возвращает итератор первому найденному элементу (end()
если не найден).
count()
, с другой стороны, имеет постоянное время выполнения O (e), где e - количество раз, когда предоставленный ключ найден. Худший случай - это коллекция, в которой все члены одинаковы, поэтому count
может иметь сложность O (n)
map
или unordered_map
не допускают дубликатов, поэтому их асимптотическое время выполнения будет одинаковым.
Выбор зависит от семантики вашего кода. Если вы хотите просто проверить, существует ли ключ, вы можете просто использовать count
. Если вы хотите проверить, существует ли ключ и использовать его значение, перейдите к find
, поскольку у вас уже будет итератор, указывающий на этот элемент.