【发布时间】: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
【问题讨论】:
-
指针类型是这里的重要部分;您正在查看
less的主要定义,但我敢打赌,它还具有与您的问题更相关的指针的专门化。重要的是:“A specialization ofstd::lessfor any pointer type yields a strict total order, even if the built-inoperator<does not.” -
在您的系统上,
<运算符的工作方式可能与std::less相同,但不是必须的。