gpt4 book ai didi

C++ upper_bound 没有匹配的函数调用到
转载 作者:行者123 更新时间:2023-11-30 02:47:39 37 4
gpt4 key购买 nike

我是 C++ 的新手,我正在尝试使用 lower_bound 和 upper_bound 对 vector 进行排序和搜索。这行代码对我来说是一个奇怪的错误:

up = upper_bound(low, this->data.end(), name, [](const human & a, const string & b) {return (a.name < b) ? true : false;});

错误是没有匹配到 <lambda at ... 类型对象的函数调用这不是在这一行触发的,而是在第 4104 行的算法库中触发的。我很困惑,因为我正在使用 upper_bound在代码的另一部分它工作正常。另外,当我从 upper_bound 更改函数时至 lower_bound一切正常。

有没有人知道如何解决这个问题?

最佳答案

当使用混合类型比较时,您需要相当小心哪个参数去哪里。根据标准(25.4.3.2 [upper.bound] 第 1 段和第 2 段),完成的比较是 comp(value, *it) 其中 value 是第三个参数到 std::upper_bound()。您没有显示足够的代码,但根据签名,我猜您需要更改参数的顺序。使用以下 lambda 应该有效:

[](std::string const& name, human const& object) {
return name < object.name;
};

值得注意的是 std::lower_bound() 需要相反顺序的参数(25.4.3.1 [lower.bound] 第 1 段和第 2 段)。事实上,您拥有的 lambda 应该适用于 std::lower_bound()!

关于C++ upper_bound 没有匹配的函数调用到 <lambda 类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22579433/

37 4 0

Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com