1.简介
QMap<Key, T>:
它提供了一个字典(关联数组),将Key类型的键值映射到T类型的值上。一般每一个键关联单一的值。QMap使用键顺序来存储它的数据;如果不关心存储顺序,那么可以使用QHash来代替它,因为QHash速度更快。
QMultiMap<Key, T>:
它是QMap的一个便捷类,提供了实现多值映射的接口函数,例如一个键可以关联多个值。
2.使用示例
#include <QCoreApplication>
#include <QMap>
#include <QMultiMap>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QMap<QString, int> map;
map["one"] = 1; // 向map中插入("one",1)
map["three"] = 3;
map.insert("seven", 7); // 使用insert()函数进行插入
// 获取键的值,使用“[ ]”操作符时如果map中没有该键,那么会自动插入
int value1 = map["six"];
qDebug() << "value1:" << value1;
qDebug() << "contains 'six' ?" << map.contains("six");
// 使用value()函数获取键的值,这样当键不存在时不会自动插入
int value2 = map.value("five");
qDebug() << "value2:" << value2;
qDebug() << "contains 'five' ?" << map.contains("five");
// 当键不存在时,value()默认返回0,这里可以设定该值,比如这里设置为9
int value3 = map.value("nine", 9);
qDebug() << "value3:" << value3;
// map默认是一个键对应一个值,如果重新给该键设置了值,那么以前的会被擦除
map.insert("ten", 10);
map.insert("ten", 100);
qDebug() << "ten: " << map.value("ten");
// 可以使用insertMulti()函数来实现一键多值,然后使用values()函数来获取值的列表
map.insertMulti("two", 2);
map.insertMulti("two", 4);
QList<int> values = map.values("two");
qDebug() << "two: " << values;
// 也可以使用QMultiMap类来实现一键多值
QMultiMap<QString, int> map1, map2, map3;
map1.insert("values", 1);
map1.insert("values", 2);
map2.insert("values", 3);
// 可以进行相加,这样map3的“values”键将包含2,1,3三个值
map3 = map2 + map1;
QList<int> myValues = map3.values("values");
qDebug() << "the values are: ";
for (int i=0; i<myValues.size(); ++i) {
qDebug() << myValues.at(i);
}
return a.exec();
}
3.解析
- 插入键值对
QMap<QString, int> map;
map["one"] = 1; // 向map中插入("one",1)
map["three"] = 3;
map.insert("seven", 7); // 使用insert()函数进行插入
- 获取键值[]
// 获取键的值,使用“[ ]”操作符时如果map中没有该键,那么会自动插入
int value1 = map["six"];
qDebug() << "value1:" << value1;
qDebug() << "contains 'six' ?" << map.contains("six");
- 获取键值value()
// 使用value()函数获取键的值,这样当键不存在时不会自动插入
int value2 = map.value("five");
qDebug() << "value2:" << value2;
qDebug() << "contains 'five' ?" << map.contains("five");
- value() 设定值
// 当键不存在时,value()默认返回0,这里可以设定该值,比如这里设置为9
int value3 = map.value("nine", 9);
qDebug() << "value3:" << value3;
- insert()插入值
// 当键不存在时,value()默认返回0,这里可以设定该值,比如这里设置为9
int value3 = map.value("nine", 9);
qDebug() << "value3:" << value3;
- insertMulti()一键多值
// 可以使用insertMulti()函数来实现一键多值,然后使用values()函数来获取值的列表
map.insertMulti("two", 2);
map.insertMulti("two", 4);
QList<int> values = map.values("two");
qDebug() << "two: " << values;
- QMultiMap 一键多值
// 也可以使用QMultiMap类来实现一键多值
QMultiMap<QString, int> map1, map2, map3;
map1.insert("values", 1);
map1.insert("values", 2);
map2.insert("values", 3);
- 获取 QMultiMap 值
// 可以进行相加,这样map3的“values”键将包含2,1,3三个值
map3 = map2 + map1;
QList<int> myValues = map3.values("values");
qDebug() << "the values are: ";
for (int i=0; i<myValues.size(); ++i) {
qDebug() << myValues.at(i);
}