Альтернатива find () для определения, содержит ли unordered_set ключ - PullRequest
0 голосов
/ 15 декабря 2018

Предположим, у меня есть unordered_set<int> S, и я хочу проверить, содержит ли он определенный int x.

Можно ли мне написать что-то вроде if(S.contains(x)){ /* code */ }, которое работает как if(S.find(x) != S.end()){ /* code */ }?

Это может быть макрос или что-то еще, но мне просто некрасиво и неоправданно долго писать такой простой метод поиска.

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Я думаю, вам нужно if(S.count(x)){//do something}.Согласно cplusplus.com , функция count ищет в контейнере элементы со значением k и возвращает количество найденных элементов.Поскольку контейнеры unordered_set не допускают дублирования значений, это означает, что функция фактически возвращает 1, если элемент с этим значением существует в контейнере, и ноль в противном случае.

0 голосов
/ 15 декабря 2018

Вместо использования std::unordered_set функции-члена find() для определения, присутствует ли данный ключ x, как в:

if (S.find(x) != S.end()) { /* code */ }

, вы можете просто использовать count() функция-член:

if (S.count(x)) { /* code */ }

std::unordered_set не допускает дублирование, поэтому count() вернет либо 0, либо 1.


The unordered_set::count() функция-член не должна быть менее эффективной, чем unordered_set::find(), поскольку обход элементов для определения количества запрошенного ключа может быть остановлен, как только он будет найден, поскольку не может быть дубликатов.

...