一、基础概念
QMap 同 QMap, 通常被用来存储键值对,即 key-value 对。它通过内部哈希表的方式来进行实现,可以在 O(log n) 的时间复杂度内完成搜索、插入和删除操作。QMap 中的 key 必须是唯一的,而 value 可以重复。
下面是 QMap 的定义和初始化过程:
QMap<QString, int> map; // 定义 map.insert("test", 100); // 初始化
二、正向遍历
正向遍历 QMap 可以使用迭代器,依次获取每个 key-value 对。可以使用 QMap::iterator 和 QMap::const_iterator,区别在于前者可以修改 value,后者不可以。
下面是遍历 QMap 的示例:
QMap<QString, int> map; map.insert("test1", 100); map.insert("test2", 200); // 使用迭代器遍历 for (QMap<QString, int>::iterator it = map.begin(); it != map.end(); ++it) { QString key = it.key(); int value = it.value(); qDebug() << key << value; }
以上代码将输出:
"test1" 100 "test2" 200
三、逆向遍历
逆向遍历 QMap 可以使用反向迭代器,与正向迭代器相比,不同的是反向迭代器是从后往前遍历。
下面是逆向遍历 QMap 的示例:
QMap<QString, int> map; map.insert("test1", 100); map.insert("test2", 200); // 使用反向迭代器遍历 for (QMap<QString, int>::reverse_iterator it = map.rbegin(); it != map.rend(); ++it) { QString key = it.key(); int value = it.value(); qDebug() << key << value; }
以上代码将输出:
"test2" 200 "test1" 100
四、查找元素
在 QMap 中查找元素可以使用 contains() 函数,该函数的返回值为 bool 类型。如果找到则返回 true,否则返回 false。
下面是查找元素的示例:
QMap<QString, int> map; map.insert("test1", 100); map.insert("test2", 200); if (map.contains("test1")) { int value = map.value("test1"); qDebug() << value; }
以上代码将输出:
100
五、删除元素
在 QMap 中删除元素可以使用 erase() 函数,该函数接受一个 key 作为参数,删除该 key 对应的 key-value 对。
下面是删除元素的示例:
QMap<QString, int> map; map.insert("test1", 100); map.insert("test2", 200); map.erase("test1"); for (QMap<QString, int>::iterator it = map.begin(); it != map.end(); ++it) { QString key = it.key(); int value = it.value(); qDebug() << key << value; }
以上代码将输出:
"test2" 200
六、总结
QMap 是 Qt 框架中的一个非常实用的容器,它通过哈希表的方式实现了高效的插入、查找和删除操作。在使用 QMap 时,我们可以通过迭代器和反向迭代器来遍历 QMap,通过 contains() 函数来查找元素,通过 erase() 函数来删除元素。