Unordered_map: какой из них быстрее find() или count()? - программирование

Unordered_map: какой из них быстрее find() или count()?

Каков самый быстрый способ выяснить, имеет ли контейнер unordered_map элемент с указанным ключом?

4b9b3361

Ответ 1

Они будут иметь одинаковую производительность. Вы должны использовать алгоритм, который лучше всего выражает то, что вы пытаетесь сделать.

Чтобы уточнить это, обычно count() будет реализован с помощью find(). Например, в libcxx count() реализуется как return (find(__k) != end());

Ответ 3

find() и count() применимы ко многим контейнерам на С++.

Для карт, множеств и т.д. find всегда будет иметь постоянное время выполнения, так как он просто вычисляет хэш и возвращает итератор первому найденному элементу (end() если не найден).

count(), с другой стороны, имеет постоянное время выполнения O (e), где e - количество раз, когда предоставленный ключ найден. Худший случай - это коллекция, в которой все члены одинаковы, поэтому count может иметь сложность O (n)

map или unordered_map не допускают дубликатов, поэтому их асимптотическое время выполнения будет одинаковым.

Выбор зависит от семантики вашего кода. Если вы хотите просто проверить, существует ли ключ, вы можете просто использовать count. Если вы хотите проверить, существует ли ключ и использовать его значение, перейдите к find, поскольку у вас уже будет итератор, указывающий на этот элемент.