通過過載較少的運算子對序列容器進行排序
如果沒有傳遞排序函式,std::sort
將通過在元素對上呼叫 operator<
來對元素進行排序,這些元素必須返回一個上下文可轉換為 bool
的型別(或者只是 bool
)。基本型別(整數,浮點數,指標等)已經在比較運算子中構建。
我們可以過載此運算子以使預設的 sort
呼叫適用於使用者定義的型別。
// Include sequence containers
#include <vector>
#include <deque>
#include <list>
// Insert sorting algorithm
#include <algorithm>
class Base {
public:
// Constructor that set variable to the value of v
Base(int v): variable(v) {
}
// Use variable to provide total order operator less
//`this` always represents the left-hand side of the compare.
bool operator<(const Base &b) const {
return this->variable < b.variable;
}
int variable;
};
int main() {
std::vector <Base> vector;
std::deque <Base> deque;
std::list <Base> list;
// Create 2 elements to sort
Base a(10);
Base b(5);
// Insert them into backs of containers
vector.push_back(a);
vector.push_back(b);
deque.push_back(a);
deque.push_back(b);
list.push_back(a);
list.push_back(b);
// Now sort data using operator<(const Base &b) function
std::sort(vector.begin(), vector.end());
std::sort(deque.begin(), deque.end());
// List must be sorted differently due to its design
list.sort();
return 0;
}