在 C++ 中查找向量中的值
Posted
技术标签:
【中文标题】在 C++ 中查找向量中的值【英文标题】:Finding values in vectors in C++ 【发布时间】:2019-10-12 23:46:23 【问题描述】:是否可以仅使用 <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 可以完成这项工作 【参考方案1】:基本上,一种使用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;
);
【讨论】:
【参考方案2】:你可以使用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++ 中查找向量中的值的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法访问/取消引用并查找存储在双指针向量中的元素的值? [关闭]