当前位置: 代码迷 >> 综合 >> QMap 和 QHash容器
  详细解决方案

QMap 和 QHash容器

热度:27   发布时间:2023-10-10 14:50:59.0

QMap类、 QHash类

  • QMap与QHash差别:
    ①QHash比QMap查找速度更快。
    ②QHash以任意顺序存储,QMap以Key顺序存储数据。
    ③QHash的Key必须提供operator==()及一个全局的qHash(Key)函数,而QMap的Key必须提供operator<()函数。
    存储一键多值数据时可使用QMultiMap<Key,T>容器或QMultiHash<Key,T>容器。

  • Java风格迭代器
    QMap 和 QHash容器

  • STL风格迭代器
    QMap 和 QHash容器

//定义一个Map容器<key, value>QMap<QString, QString> infoMap;//添加元素infoMap.insert("张三", "23岁");infoMap.insert("李四", "24岁");infoMap["王五"] = "25岁";infoMap["赵六"] = "26岁";//通过key查找valueqDebug() << "张三: " <<infoMap["张三"];qDebug() << "李四: " <<infoMap.value("李四");//通过value查找keyqDebug() << "23岁的: " << infoMap.key("23岁");//java风格只读迭代器QMapIterator<QString, QString> it_map_r(infoMap);for(it_map_r.toFront(); it_map_r.hasNext();){
    it_map_r.next();qDebug() << it_map_r.key() << ": " << it_map_r.value();}//java风格读写迭代器QMutableMapIterator<QString, QString> it_map_rw(infoMap);//修改valueif(it_map_rw.findNext("23岁")){
    it_map_rw.setValue("33岁");  }//输出数据for(it_map_rw.toFront(); it_map_rw.hasNext();){
    it_map_rw.next();qDebug() << it_map_rw.key() << ": " << it_map_rw.value();}QMap<int, QString> classMap;classMap.insert(101, "张三老师");classMap.insert(202, "李四老师");classMap.insert(303, "王五老师");classMap.insert(104, "赵六老师");//STL风格只读迭代器QMap<int, QString>::const_iterator it_class_r = classMap.constBegin();for(; it_class_r != classMap.constEnd(); it_class_r++){
    qDebug() << it_class_r.key() << ": " << it_class_r.value();}//STL风格读写迭代器QMap<int, QString>::iterator it_class_rw = classMap.begin();it_class_rw = classMap.find(101);if(it_class_rw != classMap.end()){
    it_class_rw.value() = "法外狂徒张三";	//修改value}for(it_class_rw = classMap.begin(); it_class_rw != classMap.end(); it_class_rw++){
    qDebug() << it_class_rw.key() << ": " << it_class_rw.value();}//QMultiMap 定义多个keyQMultiMap<int, QString> m_calssMap;m_calssMap.insert(101, "张三老师");m_calssMap.insert(101, "周八老师");m_calssMap.insert(101, "李四老师");m_calssMap.insert(303, "王五老师");m_calssMap.insert(104, "赵六老师");m_calssMap.insert(104, "钱九老师");//删除元素m_calssMap.remove(104, "钱九老师");//只查找101对应的所有valueqDebug() << m_calssMap.values(101);//STL风格读写迭代器QMultiMap<int, QString>::iterator it_m_class_rw = m_calssMap.begin();for(; it_m_class_rw != m_calssMap.end(); it_m_class_rw++){
    qDebug() << it_m_class_rw.key() << ": " << it_m_class_rw.value();}

 

QHash

//定义一个Hash容器QHash<int, QString> moneyHash;//添加元素moneyHash.insert(1, "壹元");moneyHash.insert(5, "伍元");moneyHash.insert(10, "拾元");moneyHash[20] = "贰拾元";moneyHash[50] = "伍拾元";moneyHash[100] = "壹百元";moneyHash.insertMulti(100, "壹佰元人民币");//删除元素moneyHash.remove(20);//java风格只读迭代器QHashIterator<int, QString> it_money_r(moneyHash);for(it_money_r.toFront(); it_money_r.hasNext();){
    qDebug() << it_money_r.key() << ": " << it_money_r.next().value();}//java风格读写迭代器QMutableHashIterator<int, QString> it_money_rw(moneyHash);//修改valueif(it_money_rw.findNext("拾元")){
    it_money_rw.setValue("10元");}//访问元素for(it_money_rw.toFront(); it_money_rw.hasNext();){
    qDebug() << it_money_rw.key() << ": " << it_money_rw.next().value();}//STL风格只读迭代器QHash<int ,QString>::const_iterator it_money_const = moneyHash.constBegin();for(; it_money_const != moneyHash.constEnd(); it_money_const++){
    qDebug() << it_money_const.key() << ": "<<it_money_const.value();}//STL风格读写迭代器QHash<int, QString>::iterator it_money = moneyHash.find(10);//修改valueif(it_money != moneyHash.end()){
    it_money.value() = "拾元";} //访问元素for(it_money = moneyHash.begin(); it_money != moneyHash.end(); it_money++){
    qDebug() << it_money.key() << ": "<<it_money.value();}