結構體內含指標時,std::sort 預設以指標位址比較(無意義),必須提供自訂比較器解引用指標比較實際資料。
struct Node {
int id;
char* name; // 動態分配字串
};
bool compareNode(const Node* a, const Node* b) {
if (a->id != b->id) return a->id < b->id; // 主鍵:id 升序
return strcmp(a->name, b->name) < 0; // 次鍵:name 字典序
}
// 使用
std::vector<Node*> vec = ...;
std::stable_sort(vec.begin(), vec.end(), compareNode); // 穩定排序保證相等元素相對順序
*ptr 或 ptr->member 存取實際資料。if (!a || !b) return a < b;。std::stable_sort(歸併排序,O(n log n) 額外空間)。std::vector<std::unique_ptr<Node>> 或直接存 Node(若可移動),避免裸指標風險。