目录
- 1 在QMap中按顺序插入QString类型的键
- 1.1 使用默认的字母顺序排序
- 1.2 自定义排序规则
- 1.3 保持插入顺序
- 1.4 使用第三方库或C++17的std::map
- 总结
1 在QMap中按顺序插入GZmHHQString类型的键
QMap本身就会自动按键排序,但对于QString类型的键,默认是按照字母顺序(字典序)排序的。如果你需要自定义排序顺序,可以通过以下几种方法实现:
1.1 使用默认的字母顺序排序
如果你只需要普通的字母顺序排序,QMap已经自动实现了:
QMap<QString, int> map; map.insert("banana", 2python); map.insert("apple", 1); map.insert("cherry", 3); // 遍历时会自动按字母顺序输出:apple, banana, cherry for (auto it = map.begin(); it != map.end(); ++it) { qDebug() << it.key() << ":" << it.value(); }
1.2 自定义排序规则
如果需要自定义排序顺序,可以提供一个比较函数:
// 自定义比较函数 - 按字符串长度排序 struct LengthCompare { bool operator()(const QString &a, const QString &b) const { return a.length() < b.length(); } }; // 使用自定义比较编程客栈函数的QMap QMap<QString, int, LengthCompare> lengthOrderedMap; lengthOrderedMap.insert("banana", 2); lengthOrderedMap.insert("apple", 1); lengthOrderedMap.insert("cherry", 3); // 遍历时会按字符串长度输出: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); } // 遍历时按插入顺序 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> // 但这不是一个独立的容器,需要结合其他方法使用
1.4 使用第三方库或C++17的std::map
如果你可以使用C++17,可以考虑:
#include <map> #include <string> std::map<std::string, int, YourCustomCompare> orderedMap;
总结
1. 默认字母顺序:直接使用QMap<QString, T>
2. 自定义排序:提供比较函数作为QMap的第三个模板参数3. 保持插入顺序:使用QMap+QList或QHash+QList组合4. C++17选项:考虑std::map with custom comparator对于大多数情况,QMap的默认排序行为已经足够,如果需要保持插入顺序,组合使用QList来记录顺序是最常见的解决方案。
到此这篇关于QT的几种QMap插入顺序说明的文章就介绍到这了,更多相关QT QMap插入顺序内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论