【问题标题】:Why is std::less better than "<"?为什么 std::less 比“<”更好?
【发布时间】:2017-03-13 11:33:01
【问题描述】:

C++ 入门,第 5 期,14.8.2,将库函数对象与算法结合使用:

vector<string *> nameTable;  // vector of pointers
// error: the pointers in nameTable are unrelated, so < is undefined
sort(nameTable.begin(), nameTable.end(),
     [](string *a, string *b) { return a < b; });
// ok: library guarantees that less on pointer types is well defined
sort(nameTable.begin(), nameTable.end(), less<string*>());

然后我检查了 std::less 的实现:

template<typename _Tp>
struct less : public binary_function<_Tp, _Tp, bool>
{
  bool
  operator()(const _Tp& __x, const _Tp& __y) const
  { return __x < __y; }
};

我发现 std::less 也使用 operator

【问题讨论】:

标签: c++ std


【解决方案1】:

因为&lt; 并不总是operator&lt;()。只有类具有运算符函数,因此您的建议不适用于内置类型。

此外,指针上的&lt; 不一定实现严格弱排序,而std::less(通过专业化——您发布的不是std::less 的“全部”!)is required to

任何指针类型的 std::less 特化都会产生严格的总顺序,即使内置运算符

简而言之:std::less 适用于任何支持小于比较的事物。

【讨论】:

    猜你喜欢
    • 2019-04-02
    • 2013-09-13
    • 2012-10-07
    • 2020-04-27
    • 1970-01-01
    • 2012-12-01
    • 2014-01-11
    • 2013-03-18
    相关资源
    最近更新 更多