QT的幾種QMap插入順序說明
1 在QMap中按順序插入QString類型的鍵
QMap本身就會自動(dòng)按鍵排序,但對于QString類型的鍵,默認(rèn)是按照字母順序(字典序)排序的。如果你需要自定義排序順序,可以通過以下幾種方法實(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í)會自動(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ù) - 按字符串長度排序
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í)會按字符串長度輸出:apple, banana, cherry1.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 使用第三方庫或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
對于大多數(shù)情況,QMap的默認(rèn)排序行為已經(jīng)足夠,如果需要保持插入順序,組合使用QList來記錄順序是最常見的解決方案。
到此這篇關(guān)于QT的幾種QMap插入順序說明的文章就介紹到這了,更多相關(guān)QT QMap插入順序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言科學(xué)計(jì)算入門之矩陣乘法的相關(guān)計(jì)算
這篇文章主要介紹了C語言科學(xué)計(jì)算入門之矩陣乘法的相關(guān)計(jì)算,文章中還介紹了矩陣相關(guān)的斯特拉森算法的實(shí)現(xiàn),需要的朋友可以參考下2015-12-12
QTableWidget設(shè)置只讓某一列可編輯的實(shí)現(xiàn)
本文介紹了如何將QTableWidget的某一列設(shè)置為可編輯,以便用戶可以輸入自定義數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08
VS2017+Qt5+Opencv3.4調(diào)用攝像頭拍照并存儲
本文主要介紹了VS2017+Qt5+Opencv3.4調(diào)用攝像頭拍照并存儲,實(shí)現(xiàn)了視頻,拍照,保存這三個(gè)功能。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-05-05

