QT的幾種QMap插入順序說(shuō)明
1 在QMap中按順序插入QString類型的鍵
QMap本身就會(huì)自動(dòng)按鍵排序,但對(duì)于QString類型的鍵,默認(rèn)是按照字母順序(字典序)排序的。如果你需要自定義排序順序,可以通過(guò)以下幾種方法實(shí)現(xiàn):
1.1 使用默認(rèn)的字母順序排序
如果你只需要普通的字母順序排序,QMap已經(jīng)自動(dòng)實(shí)現(xiàn)了:
QMap<QString, int> map; map.insert("banana", 2); map.insert("apple", 1); map.insert("cherry", 3); // 遍歷時(shí)會(huì)自動(dòng)按字母順序輸出:apple, banana, cherry for (auto it = map.begin(); it != map.end(); ++it) { qDebug() << it.key() << ":" << it.value(); }
1.2 自定義排序規(guī)則
如果需要自定義排序順序,可以提供一個(gè)比較函數(shù):
// 自定義比較函數(shù) - 按字符串長(zhǎng)度排序 struct LengthCompare { bool operator()(const QString &a, const QString &b) const { return a.length() < b.length(); } }; // 使用自定義比較函數(shù)的QMap QMap<QString, int, LengthCompare> lengthOrderedMap; lengthOrderedMap.insert("banana", 2); lengthOrderedMap.insert("apple", 1); lengthOrderedMap.insert("cherry", 3); // 遍歷時(shí)會(huì)按字符串長(zhǎng)度輸出:apple, banana, cherry
1.3 保持插入順序
如果需要保持插入順序而不是排序順序,可以考慮:
方案1:使用QMap+QList組合
QMap<QString, int> map; QList<QString> insertionOrder; void insertInOrder(const QString &key, int value) { if (!map.contains(key)) { insertionOrder.append(key); } map.insert(key, value); } // 遍歷時(shí)按插入順序 for (const QString &key : insertionOrder) { qDebug() << key << ":" << map.value(key); }
方案2:使用QHash+QList組合
QHash<QString, int> hash; QList<QString> insertionOrder; void insertInOrder(const QString &key, int value) { if (!hash.contains(key)) { insertionOrder.append(key); } hash.insert(key, value); }
方案3:使用Qt 5.14+的QSequentialIterable容器
#include <QSequentialIterable> // 但這不是一個(gè)獨(dú)立的容器,需要結(jié)合其他方法使用
1.4 使用第三方庫(kù)或C++17的std::map
如果你可以使用C++17,可以考慮:
#include <map> #include <string> std::map<std::string, int, YourCustomCompare> orderedMap;
總結(jié)
1. 默認(rèn)字母順序:直接使用QMap<QString, T>
2. 自定義排序:提供比較函數(shù)作為QMap的第三個(gè)模板參數(shù)
3. 保持插入順序:使用QMap+QList或QHash+QList組合
4. C++17選項(xiàng):考慮std::map with custom comparator
對(duì)于大多數(shù)情況,QMap的默認(rèn)排序行為已經(jīng)足夠,如果需要保持插入順序,組合使用QList來(lái)記錄順序是最常見(jiàn)的解決方案。
到此這篇關(guān)于QT的幾種QMap插入順序說(shuō)明的文章就介紹到這了,更多相關(guān)QT QMap插入順序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言科學(xué)計(jì)算入門之矩陣乘法的相關(guān)計(jì)算
這篇文章主要介紹了C語(yǔ)言科學(xué)計(jì)算入門之矩陣乘法的相關(guān)計(jì)算,文章中還介紹了矩陣相關(guān)的斯特拉森算法的實(shí)現(xiàn),需要的朋友可以參考下2015-12-12QTableWidget設(shè)置只讓某一列可編輯的實(shí)現(xiàn)
本文介紹了如何將QTableWidget的某一列設(shè)置為可編輯,以便用戶可以輸入自定義數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08C語(yǔ)言大廠面試技巧及strcpy()函數(shù)示例詳解
這篇文章主要為大家介紹了C語(yǔ)言面試技巧,以strcpy()函數(shù)為示例進(jìn)行分析詳解,有需要沖刺大廠的朋友們可以借鑒參考下,希望能夠有所幫助2021-11-11VS2017+Qt5+Opencv3.4調(diào)用攝像頭拍照并存儲(chǔ)
本文主要介紹了VS2017+Qt5+Opencv3.4調(diào)用攝像頭拍照并存儲(chǔ),實(shí)現(xiàn)了視頻,拍照,保存這三個(gè)功能。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05