检查数组中是否存在项

Checking for existence of item in array

本文关键字:存在 是否 数组 检查      更新时间:2023-10-16

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

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

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

如果你想过时:

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

我匆忙写的,我很累,但希望它能有所用处。