首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 含指標結構體陣列排序:比較器設計與穩定性保證

     編輯:程式設計疑難解答

核心挑戰

結構體內含指標時,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); // 穩定排序保證相等元素相對順序

關鍵點總結

  1. 解引用比較:比較器內必須 *ptr 或 ptr->member 存取實際資料。
  2. 空指標防護:若指標可為 null,優先處理 if (!a || !b) return a < b;。
  3. 穩定排序:需保持相等元素原序時使用 std::stable_sort(歸併排序,O(n log n) 額外空間)。
  4. 記憶體管理:排序僅移動指標,不涉及深拷貝;析構時統一釋放指標指向的記憶體。
  5. 現代化替代:改用 std::vector<std::unique_ptr<Node>> 或直接存 Node(若可移動),避免裸指標風險。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved