在C++的向量中查找值

Finding values in vectors in C++

本文关键字:查找 向量 C++      更新时间:2023-10-16

是否可以仅使用<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();
}