我想使用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函数中,才导致了这个问题。我很快就会关闭这个职位。再次感谢大家!
发布于 2015-02-13 17:13:03
使用第一个元素构造一个向量,作为要搜索的数字:
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];});
}发布于 2015-02-13 17:12:05
第三个参数需要是包含2作为其第一个元素的向量,其语法不是2或vector<int> 2,而是
vector<int> {2}https://stackoverflow.com/questions/28504835
复制相似问题