检查数组中是否存在项目

时间:2013-12-21 19:06:24

标签: c++

是否有代码可以检查某个字符串是否在数组中? 例如,我有一个字符串“John”,然后我需要检查“John”是否已经在数组名称中[10]。

2 个答案:

答案 0 :(得分:4)

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来获得对数运行时。

这是相同的代码,包含在一个便利函数中:

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

这是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;
}

(将数组传递给函数的语法有点奇怪。)

答案 1 :(得分:-2)

如果你想过时:

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");

我草草地写了这个,我很累,但希望它有用。