首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ 11 binary_search和lambda函数用例

C++ 11 binary_search和lambda函数用例
EN

Stack Overflow用户
提问于 2015-02-13 17:03:13
回答 2查看 3.9K关注 0票数 0

我想使用std::binary_search与lambda函数,但得到编译错误。

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

代码语言:javascript
复制
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版:

代码语言:javascript
复制
binary_search(begin(matrix), end(matrix), 2,
  [] (const vector<int> &r1, const vector<int> &r2) {return r1[0] < r2[0];});

第2版:

代码语言:javascript
复制
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函数中,才导致了这个问题。我很快就会关闭这个职位。再次感谢大家!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-13 17:13:03

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

代码语言:javascript
复制
binary_search(begin(matrix), end(matrix), vector<int>{2},
[] (const vector<int> &r1, const vector<int> &r2) {return r1[0] < r2[0];});

那应该管用。

更新:由于编译有问题,下面是可编译的完整代码:

代码语言:javascript
复制
#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];});
}
票数 3
EN

Stack Overflow用户

发布于 2015-02-13 17:12:05

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

代码语言:javascript
复制
vector<int> {2}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28504835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档