C ++ 11 binary_search和lambda函数用例

时间:2015-02-13 17:03:13

标签: c++ c++11 matrix stl lambda

我想将std :: binary_search与lambda函数一起使用但是编译错误。

假设我有一个矩阵,第一列已排序。

1  5  9
2  4  6 
3  7  8

vector<vector<int>> matrix;
matrix.push_back(vector<int> {1, 5, 9)};
matrix.push_back(vector<int> {2, 4, 6)};
matrix.push_back(vector<int> {3, 7, 8)};

我想搜索第一列中是否存在数字。

(请不要考虑暂时的实际用法)

我试过了:

版本1:

binary_search(begin(matrix), end(matrix), 2,
  [] (const vector<int> &r1, const vector<int> &r2) {return r1[0] < r2[0];});

第2版:

binary_search(begin(matrix), end(matrix), vector<int> {2},
  [] (const vector<int> &r1, const vector<int> &r2) {return r1[0] < r2[0];});

任何人都可以帮我解决这个问题吗? (矩阵第一列中的binary_search)

更新

谢谢大家!我学到了一个教训,我应该把导致这个bug的原始代码放在这里。

最后,我发现这是因为我没有将 const 放在导致问题的lambda函数中。我很快就会关闭这篇文章。再次感谢大家!

2 个答案:

答案 0 :(得分:3)

构造一个向量,第一个元素作为您要搜索的数字:

binary_search(begin(matrix), end(matrix), vector<int>{2},
[] (const vector<int> &r1, const vector<int> &r2) {return r1[0] < r2[0];});

应该有用。

更新:由于您在编译时遇到问题,这里是可编辑的完整代码:

#include <vector>
#include <algorithm>

using namespace std;

int main() {
  vector<vector<int>> matrix;
  matrix.push_back(vector<int> {1, 5, 9});
  matrix.push_back(vector<int> {2, 4, 6});
  matrix.push_back(vector<int> {3, 7, 8});
  binary_search(begin(matrix), end(matrix), vector<int>{2},
    [] (const vector<int> &r1, const vector<int> &r2) {return r1[0] < r2[0];});
}

答案 1 :(得分:2)

第三个参数需要是一个包含2作为其第一个元素的向量,其语法不是2也不是vector<int> 2而是

vector<int> {2}