在 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 valuesv[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++ 中查找向量中的值的主要内容,如果未能解决你的问题,请参考以下文章

如何将来自先前类的值存储到 C++ 中的向量中?

有没有办法访问/取消引用并查找存储在双指针向量中的元素的值? [关闭]

将文件中的双值数字读入 C++ 中的向量并访问它们的值

使用 C++,尝试使用 for 循环和 std::max 查找向量中的最大单词

C++:如何检测向量中的重复项并打印一份?

通过 C++ 中的外部函数更改存储在另一个对象的向量中的对象中元素的值