C++ 11 binary_search 和 lambda 函数用例

C++ 11 binary_search and lambda function use case

我想将 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)

更新:

谢谢大家!我吸取了教训,我应该把导致错误的原始代码放在这里。

最后我发现是因为我没有在lambda函数中放入const导致了这个问题。我会尽快关闭此 post。再次感谢大家!

第三个参数必须是第一个元素为 2 的向量,其语法不是 2 也不是 vector<int> 2,而是

vector<int> {2}

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

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];});
}