一、QMap排序簡介
QMap是Qt的一個關聯容器,用來實現一個關聯數組。
QMap提供了基於key(鍵)的值的查找,插入和刪除操作。
QMap的底層使用紅黑樹(Red-Black Tree)來實現,它保證在對多次操作時,所有操作的複雜度都是 O(log n)。
二、QMap排序的三種方式
1. 按照key排序
// 準備需要排序的QMap QMap map; map[1] = "a"; map[3] = "c"; map[2] = "b"; map[4] = "d"; // 使用QMap的key進行排序 QMap sorted = QMap(std::less(), map);
這裡我們通過 std::less() 來進行排序,也可以使用 std::greater() 進行降序排序。
2. 按照value排序
// 準備需要排序的QMap QMap map; map[1] = "a"; map[3] = "c"; map[2] = "b"; map[4] = "d"; // 使用QMap的value進行排序 QList keys = map.keys(); // 獲取所有的key std::sort(keys.begin(), keys.end(), [&](int a, int b){ return map.value(a) < map.value(b); }); QMap sorted; foreach(int key, keys) sorted[key] = map.value(key);
這裡我們通過 std::sort() 函數來排序,其中通過 lambada 表達式來定義排序的方式。
3. 自定義排序方式
// 定義一個結構體 struct Person { QString name; int age; // 自定義小於號運算符 bool operator<(const Person& other) const { return age < other.age; } }; // 準備需要排序的QMap QMap map; map[1] = {"Alice", 20}; map[3] = {"Bob", 25}; map[2] = {"Charlie", 18}; // 使用QMap的value進行排序 QList keys = map.keys(); std::sort(keys.begin(), keys.end(), [&](int a, int b){ return map.value(a) < map.value(b); }); QMap sorted; foreach(int key, keys) sorted[key] = map.value(key);
這裡我們定義了一個自定義的結構體 Person,並重載了小於號運算符,再通過 std::sort() 進行排序。
三、QMap排序的注意事項
1. QMap只能對key進行排序
QMap只能對key進行排序,如果需要按value排序,需要通過轉換成QList進行排序並重新構建一個新的QMap。
2. QMap對象內部排序
通過QMap的構造函數來排序QMap,將會創建一個新的QMap並返回,而不是直接在原始QMap中進行排序。
3. 自定義排序方式需要仔細考慮
自定義排序方式需要仔細考慮,應當在 operator< 中考慮到所有情況並返回正確的結果,避免造成程序運行的錯誤。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/182141.html