對 vector 排序,Person = {int num; string name;},規則:num 升序,相同則 name 升序。無 operator<、無建構函數、存實例非指標。
錯誤方向!C++ 有 <algorithm> 標準庫,std::sort 平均 O(N log N)、Introsort 混合演算法,效能與穩健度遠超手寫。
#include
using namespace std;
struct Person { int num; string name;
Person(int n, string s) : num(n), name(s) {} };
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;
}
};
}
struct PrintPerson { void operator()(const Person& p) const {
cout << "Person: " << p.num << ", " << p.name << endl;
} };
int main() {
vector v;
v.push_back(Person(2,"smith")); v.push_back(Person(1,"john"));
v.push_back(Person(2,"micheal")); v.push_back(Person(1,"micheal"));
v.push_back(Person(3,"albert"));
sort(v.begin(), v.end(), less());
for_each(v.begin(), v.end(), PrintPerson());
}
輸出:
Person: 1, john
Person: 1, micheal
Person: 2, micheal
Person: 2, smith
Person: 3, albert
核心訊息:**知識庫裡已有解決方案,別重複造輪子**。