結構:
struct Person { int num; string name; }; // 無 operator<
規則:num 升序,相同則 name 升序。
namespace std {
template<> struct less {
bool operator()(const Person& p1, const Person& p2) const {
if (p1.num < p2.num) return true;
if (p1.num == p2.num && p1.name < p2.name) return true;
return false;
}
};
}
int main() {
vector v = { {2,"smith"}, {1,"john"}, {2,"micheal"}, {1,"micheal"}, {3,"albert"} };
sort(v.begin(), v.end(), less());
for_each(v.begin(), v.end(), [](const Person& p) {
cout << "Person: " << p.num << ", " << p.name << endl;
});
}
輸出正確排序結果。
C++11 Lambda 讓比較邏輯內聯更簡潔 (見下篇)。