QMap
QMap/QMultiMap属于关联式容器,其底层结构是通过二叉树实现,故其查找value的效率很快。QMap中的数据都是成对出现的,第一个称为key(键),第二个称value(键值)。
QMap是Qt的一个模板类,它是基于红黑树算法的一套字典。
QMap<Key,T>是Qt容器类型的一种,它通过(Key, value)存储一对值,并通过Key可以查找与之关联的value的值。
QMap的概念和数学中的函数类似,是一种映射对应关系:
y = f(x)
一个x对应一个y, 但是一个y可能还有多个x对应。QMap<Key, Value> 也是这种关系,
不能有重复的Key, 可以有重复的Value, 并且QMap中的元素是按照`Key进行升序排列`,
如果有重复的Key, 那么对应的Value会被覆盖。

【1】UI按钮


【2】UI按钮槽函数
//QMapvoidMainWindow::on_pushButton_clicked(){//键值 通过键匹配值
QMap<QString , QByteArray>map;//插入数据方式1
map.insert("1","2022");
map.insert("2","2023");//插入数据方式2
map["3"]="2024";
map["4"]="2025";//获取值 方式1
QByteArray value1 = map["1"];
QByteArray value2 =map.value("2");qDebug()<<"value = "<<value1;//打印方式1qDebug("value = %s\n",value1.data());//打印方式2//判断容器中是否存在键值if(map.contains("1")){qDebug()<<"true"<<endl;}if(map.contains("5")==false){qDebug()<<"false"<<endl;}//遍历容器所有内容 方式1
QMap<QString ,QByteArray>::const_iterator it=map.constBegin();while(it!=map.constEnd()){qDebug()<<"键="<<it.key()<<" 值="<<it.value()<<endl;++it;}//获取所有键 在通过键获取所有值 方式2
QList<QString>keylists = map.keys();for(int i=0;i<keylists.length();i++){qDebug()<<"键="<<keylists.at(i);qDebug()<<"值="<<map.value(keylists.at(i));}/* 或 */for(QMap<QString, QByteArray>::const_iterator it1 = map.constBegin(); it1 != map.constEnd(); it1++){qDebug()<< it1.key()<<": "<< it1.value();}/* Java类型的迭代 方式3*/
QMapIterator<QString, QByteArray>iterator(map);while(iterator.hasNext()){//如果在迭代器前面至少有一个项,则返回true,即迭代器不在容器的后面;否则返回false。
iterator.next();//返回下一个项,并将迭代器推进一个位置。qDebug()<< iterator.key()<<":"<< iterator.value();}//键值查找键
QString key = map.key("2022");qDebug()<<"key="<<key<<endl;//修改键值 键不变 值更新
map.insert("1","9999");qDebug()<<"map容器里面的第一个值"<<map.first();qDebug()<<"map容器里面的最后一个值"<<map.last();/* 通过insert方法进行插值会覆盖以前的值,但是通过insertMulti方法不会覆盖,而是会增加一对 */
map.insert("Math","100");
map.insertMulti("Math","150");
map.insertMulti("Math","200");
map.insertMulti("Math","250");qDebug()<< map.value("Math");qDebug()<< map.values("Math");/* 获取Math所有键值 先进后出*//* 查看当前键和键值的数量 */qDebug()<< map.keys().size();qDebug()<< map.values().size();//删除元素 方式1int del =map.remove("2");qDebug()<<"del = "<<del;int del1 =map.remove("4");qDebug()<<"del = "<<del1;//删除元素 查找方式2
QMap<QString ,QByteArray>::iterator ti = map.end();
ti=map.find("1");
map.erase(ti);//it是迭代器qDebug()<<map.contains("1");//清除数据
map.clear();qDebug()<<map.isEmpty();//容器为空返回true}
【3】Qmap 输出结果

版权归原作者 「QT(C++)开发工程师」 所有, 如有侵权,请联系我们删除。