Проверьте, есть ли элемент в списке (содержит)

У меня есть список элементов, скажем, целых чисел, и я хочу проверить, является ли моя переменная (другое целое число) одним из элементов в списке. В Python я бы сделал:

my_list = [1,2,3,4] # elements
my_var = 3 # my variable
my_var in my_list # returns boolean

Как это сделать в C ++? Я думал об использовании std::listно я не могу найти нет find метод в этом. Я вижу такой метод в std::set состав.

Более глубоко проблема заключается в том, что моей программе присваиваются уникальные идентификаторы (список, набор и т. Д.), И я перебираю длинный список входных данных (идентификаторов) и проверяю, включены ли они в список (логическое значение, возвращаемое для каждый шаг итерации). И я не уверен, как мне это сделать в C ++.

26

Решение

Ты можешь использовать std::find

bool found = (std::find(my_list.begin(), my_list.end(), my_var) != my_list.end());

Вы должны включить <algorithm>, Он должен работать со стандартными контейнерами, списками векторов и т. Д.

47

Другие решения

std::list не предоставляет метод поиска. Вы можете перебрать список и проверить, существует ли элемент или использовать std::find, Но я думаю, что для вашей ситуации std::set является более предпочтительным. Бывший возьмет O(n) время, но позже займет O(lg(n)) время искать.

Вы можете просто использовать:

if(mySet.find(myVar) != mySet.end()){
//do whatever
}
14

Вы должны #include <algorithm>тогда вы можете использовать станд :: найти

4

использование std::find, что-то вроде:

if (std::find(std::begin(my_list), std::end(my_list), my_var) != std::end(my_list))
// my_list has my_var
1

Они действительно должны добавить обертку. Как это:

namespace std
{
template<class _container,
class _Ty> inline
bool contains(_container _C, const _Ty& _Val)
{return std::find(_C.begin(), _C.end(), _Val) != _C.end(); }
};
...
if( std::contains(my_container, what_to_find) )
{

}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector