簡體   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