QT QMap-QMultiMap类实现一键多值的具体应用
QMap<Key, T>:
它提供了一个字典(关联数组),将Key类型的键值映射到T类型的值上。一般每一个键关联单一的值。QMap使用键顺序来存储它的数据;如果不关心存储顺序,那么可以使用QHash来代替它,因为QHash速度更快。
QMultiMap<Key, T>:
它是QMap的一个便捷类,提供了实现多值映射的接口函数,例如一个键可以关联多个值
PS: QMap 一个Key 只能对应 一个Value (不是绝对的情况...内部都有 一个key对应多个value的机制)
PS: QMultiMap 一个Key 可以对应 多个Value
PS: QMap&QMultiMap 和 QHash&QMultiHash 理解上类似
#include <QCoreApplication>
//QMap的具体应用
#include <QMap>
#include <QMultiMap>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QMap<QString,int> map2;
map2["one"] = 1; //向map中插入(“one”,1),[]方式,如果map2中没有one键,则自动插入,然后赋值1
map2["three"] = 3;
//插入方式2
map2.insert("eight",8);//insert函数方式插入
int value1 =map2["five"];//[]方式,如果map2中没有five键,则自动插入
qDebug()<<"five value is:"<<value1;
qDebug()<<"是否有three:"<<map2.contains("three");
int value2 =map2.value("nine");//value()函数方式获取,没有nine不会自动插入
qDebug()<<"value2的值:"<<value2;
int value3 =map2.value("nine",9);//给nine赋值9
//重新给该键赋值,将擦除之前的值
map2.insert("six",6);
map2.insert("six",66);
//一键多值设置与获取
map2.insertMulti("two",2);
map2.insertMulti("two",22);
//获取
QList<int> values=map2.values("two");//two对应的两个值放入QList<int>中
qDebug()<<"two的两个值:"<<values;
//QMultiMap类实现一键多值
QMultiMap<QString,int> map1a,map2a,map3a;
map1a.insert("values",11);
map1a.insert("values",22);
map2a.insert("values",33);
//map1a可以和map2a相加
map3a=map1a+map2a;
//获取map3a的值
QList<int> my_values=map3a.values("values");
qDebug()<<"the values are:";
for(int i=0;i<my_values.size();++i)
{
qDebug()<<my_values.at(i);
}
return a.exec();
}