在C++的向量中查找值
Finding values in vectors in C++
是否可以仅使用<algorithm>
库重新创建以下函数,而无需执行任何循环?
bool find(int x, int y, vector<vector<int>> v)
{
for(int j=v[0].size()-1;j>=0;j--)
if((x==v[0][j])and(y==v[1][j])) return true;
return false;
}
v={{x values},{y values}}
和v[0].size()=v[1].size()
的地方
基本上,使用find_if
执行此操作的一种方法:
bool find(int x, int y, std::vector<std::vector<int>> v) {
return v[0].end() != std::find_if(v[0].begin(), v[0].end(),
[x, y, second_vec = v[1].data(), first_data_addr = v[0].data()](int &val) {
return (x == val) && (y == *(second_vec + (&val - first_data_addr)));
});
}
同样但不弄乱地址:
bool find(int x, int y, std::vector<std::vector<int>> v) {
return v[0].end() != std::find_if(v[0].begin(), v[0].end(),
[x, y, second_vec = v[1].data()](int &val) mutable {
static int j;
auto ans = (x == val) && (y == *(second_vec + j));
j++;
return ans;
});
}
您可以使用std::mismatch
:
bool find(int x, int y, const vector<int>& v1, const vector<int>& v2)
{
const auto mismatches = [x, y] (int lhs, int rhs) { return lhs != x || rhs != y; };
return std::mismatch(v1.cbegin(), v1.cend(), v2.cbegin(), mismatches).first != v1.cend();
}
相关文章:
- 在 C++11 中,如何查找并返回以给定字符串开头的字符串向量中的所有项?
- 以C++递归方式查找向量中的最大值
- C++如何在向量中查找最常见的元素
- 查找两个排序向量中共有的元素
- 这是查找向量中元素位置的合法方法吗?
- 使用 C++ 查找向量的中值
- 查找向量的平均值
- 查找向量的一个向量的元素是否存在于另一个向量中
- 查找向量中数字的出现次数(以C++为单位)
- 查找向量C++中变量之间的百分比差异
- 查找向量中的最小值
- 迭代和递归地查找向量中是否存在元素
- 查找向量中的值索引位置
- 查找向量中的 n 个最大值
- 如何查找向量中元素的最大和最小索引
- 查找向量中小于阈值(复杂度)的所有数字
- 查找向量中某个元素的所有引用的索引
- 查找向量中最小+最大值元素的函数
- 在c++中查找向量中的值的差
- 如何在 C++ 中查找向量的第 m 和第 n 个元素之间的 max 元素