检查数组中是否存在项
Checking for existence of item in array
是否有代码可以检查某个字符串是否在数组中?例如,我有一个字符串"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");
我匆忙写的,我很累,但希望它能有所用处。
相关文章:
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 有了gcc,是否可以链接库,但前提是它存在
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- 如何检查QList中是否存在值
- 根据某个函数是否存在启用模板
- 地图计数确实很重要,或者只是检查是否存在
- C++中是否存在 std::conditional 的懒惰等价物?
- 无论如何,我可以确定构造函数是否存在吗?
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- 堆分配的对象是否存在永不为空的唯一所有者?
- 扩展类中的可选 vir 函数,测试它在运行时是否存在
- 模板化检查是否存在带有参数列表的类成员函数?
- 是否存在包含负号的isdigit函数(过载)
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 检查编译时是否存在静态函数
- 向量是否存在行主要形式?
- 检查 TinyXML 中的元素是否存在
- 检测是否存在具有 C++17 的类成员
- 虚拟继承中是否存在多重继承?
- 我遇到了这个代码片段,不明白. 它递归检查 C++ 字符串中是否存在大写字符