繁体   English   中英

为什么std ::比“<”更好?

[英]Why is std::less better than “<”?

C ++ primer,5th,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 <来完成工作,所以为什么<未定义且库保证指针类型的定义较少,为什么std:少推荐,为什么std ::不如<。

因为<并不总是operator<() 只有类具有操作符函数,因此您的建议不适用于内置类型。

此外, < on pointers并不一定实现严格弱的排序,而std::less (通过专门化 - 你发布的不是std::less !) 需要

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM