我想将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函数中。我很快就会关闭这篇文章。再次感谢大家!
答案 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}