Проверка наличия элемента в массиве

-6

Есть ли код, который будет проверять, находится ли определенная строка внутри массива? Например, у меня есть строка "Джон", тогда мне нужно проверить, находится ли "Джон" в именах массивов [10].

спросил(а) 2013-12-21T22:06:00+04:00 6 лет, 10 месяцев назад
0
91

std::find делает именно это:

auto i = std::find(std::begin(a), std::end(a), "John");

if (i != std::end(a)) … // item found!

Однако будьте осторожны, что это делает линейный проход по элементам. Это не проблема для 10 предметов, но она становится неэффективной быстро с большим количеством. Для очень больших наборов используйте std::unordered_set вместо массива, чтобы достичь (теоретически) постоянного времени выполнения. В качестве альтернативы, если вы знаете, что массив отсортирован, вы можете использовать std::binary_search для достижения логарифмической среды выполнения.

Heres тот же код, завернутый в функцию удобства:

template <typename It, typename T>
bool contains(It begin, It end, T const& value) {
return std::find(begin, end, value) != end;
}

И heres удобная перегрузка для C-массивов:

template <typename T, typename U, std::size_t N>
bool contains(T (&arr)[N], U const& value) {
return std::find(arr, arr + N, value) != arr + N;
}

(Синтаксис для передачи массивов в функции немного странный.)

ответил(а) 2013-12-21T22:08:00+04:00 6 лет, 10 месяцев назад
-6

Если вы хотите пойти архаично:

function in_array(String my_array[], String findthis){
len=sizeof my_array;
for(int i=0;i<len;i++){
if(my_array[i]==findthis){
return true;
}
}
return false;
}

тогда

in_array(array_of_strings, "john");

Я написал это поспешно, и я очень устал, но, надеюсь, это может пригодиться.

ответил(а) 2013-12-21T22:15:00+04:00 6 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема