它可以使用標準的功能,如果你的類型實現了"bool operator < (...) const"
和拷貝構造函數(編譯器生成的或自定義)。
struct MyType {
int a;
int b;
bool operator < (const MyType& other) const {
... // a meaningful implementation for your type
}
// Copy constructor (unless it's a POD type).
MyType(const MyType &other)
: a(other.a), b(other.b) { }
// Some other form of construction apart from copy constructor.
MyType()
: a(0), b(0) { }
};
或者,也可以通過一個排序函數(或仿函數),爲第三個參數sort()
代替實施操作者"<"
。
bool type_is_less(const MyType& t1, const MyType& t2) { ... }
...
std::sort(c.begin(), c.end(), type_is_less);
這是在下列情況下有效:
- 你不希望實現無論出於何種原因操作
"<"
,
- 你需要排序的內置或指針類型的容器爲此您不能重載操作員。
- 你想使用不同排序順序進行排序。例如:有時候你需要一個結構,其中第一個姓氏成員按姓氏排序,其他時間按姓氏排序。兩個不同的函數(或函子)使這樣的選項變得微不足道。
另一種選擇是專注'的std :: less`你的類型。這樣你就不必每次都傳遞函數(例如,因爲確實有一個合理的定義),但是你的類型不會得到`operator <`。 – 2009-07-25 06:02:32