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