【发布时间】:2017-08-30 00:30:49
【问题描述】:
这里是 std::lower_bound 和 std::upper_bound 的示例,请注意将比较 lambda 的签名传递给它们 -
const auto lower_x = std::lower_bound(
points.begin(), points.end(), rec.min_corner.x,
[](const RankedPoint &rp, const double x) { return rp.point.x < x; });
const auto upper_x = std::upper_bound(
points.begin(), points.end(), rec.max_corner.x,
[](const double x, const RankedPoint &rp) { return x < rp.point.x; });
保持签名完全相反的可能原因是什么?当我使用 auto 而不是带有错误签名的明确类型时,我没有意识到这一点,并且 gcc 编译了(clang 没有)它。让我沮丧了 10 分钟。
【问题讨论】:
-
因为比较函数的语义必须是“小于
<”。 -
Ranges 库将允许投影来解决这个问题 :-)
标签: c++ c++11 stl c++14 c++-standard-library