ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Qhash简介

Qhash简介

Qhash简介

  1. Qhash是无序的,插入的顺序和输出的顺序并不相同。
voidWidget::on_pushButton_clicked(){QHash<int,QString>m_hash;m_hash.insert(1,"tanglin");m_hash.insert(2,"renyong");m_hash.insert(3,"wenqiang");m_hash.insert(4,"laowang");foreach(QString value,m_hash){qDebug()<<value;}}//第一次调试输出"wenqiang""renyong""tanglin""laowang"//第二次调试输出"tanglin""laowang""wenqiang""renyong"

2.Qhash如果插入相同的key,则后面的 key,value 将覆盖前一次的 key,value

voidWidget::on_pushButton_2_clicked(){QHash<int,QString>m_hash;m_hash.insert(4,"laowang");m_hash.insert(4,"libai");qDebug()<<m_hash.value(4);}//输出"libai"
  1. 自定义数据类型
#ifndefWIDGET_H#defineWIDGET_H#include<QWidget>namespaceUi{classWidget;}classWidget:publicQWidget{Q_OBJECTpublic:explicitWidget(QWidget*parent=0);~Widget();privateslots:voidon_pushButton_clicked();voidon_pushButton_2_clicked();voidon_pushButton_3_clicked();voidon_pushButton_4_clicked();private:Ui::Widget*ui;};structmyDate{private:intage;QString name;public:inlinebooloperator==(constmyDate&other)const{return(this->age==other.age&&this->name==other.name);}myDate(intage,QString name){this->age=age;this->name=name;}myDate(){this->age=20;this->name="libia";}};#endif// WIDGET_H
#include"widget.h"#include"ui_widget.h"#include<QMap>#include<QHash>#include<QString>#include<QDebug>#include<QList>Widget::Widget(QWidget*parent):QWidget(parent),ui(newUi::Widget){ui->setupUi(this);//定义一个map容器QMap<int,QString>map;//向map容器里面插入数据map.insert(1,"tanglin");map.insert(2,"renyong");map.insert(3,"yongxiang");//读取数据QString temp;temp=map.value(1);qDebug()<<temp;//返回key和value的列表QList<int>keylist=map.keys();foreach(intkey,keylist){qDebug()<<key;}QList<QString>valueList=map.values();// foreach (QString value, valueList) {// qDebug() << value;// }}Widget::~Widget(){deleteui;}voidWidget::on_pushButton_clicked(){QHash<int,QString>m_hash;m_hash.insert(1,"tanglin");m_hash.insert(2,"renyong");m_hash.insert(3,"wenqiang");m_hash.insert(4,"laowang");foreach(QString value,m_hash){qDebug()<<value;}}voidWidget::on_pushButton_2_clicked(){QHash<int,QString>m_hash;m_hash.insert(4,"laowang");m_hash.insert(4,"libai");qDebug()<<m_hash.value(4);}//查找voidWidget::on_pushButton_3_clicked(){QHash<int,QString>m_hash;m_hash.insert(1,"tanglin");m_hash.insert(2,"renyong");m_hash.insert(3,"wenqiang");m_hash.insert(4,"laowang");autoit=m_hash.find(3);if(it!=m_hash.end()){qDebug()<<it.value();}}//自定义数据类型voidWidget::on_pushButton_4_clicked(){//QHash 使用自定义数据结构作为key,需要该自定义数据结构重写了 operator== 运算符,还要求有一个全局的 uint qHash(const Student& key, uint seed = 0);函数QHash<myDate,QString>m_hash;m_hash.insert(myDate(),"good");m_hash.insert(myDate(11,"nihao"),"bad");qDebug()<<m_hash.value(myDate());}uintqHash(constmyDate&selt,uint seed){return100^seed;}

QMap 简介

  1. QMap是有序的
classStudent{public:Student(intnAge,constQString&sName);~Student();//inline bool operator==(const Student& student) const;inlinebooloperator<(constStudent&student)const{if(this->m_nAge!=student.m_nAge){returnthis->m_nAge<student.m_nAge;}returnthis->m_sName<student.m_sName;}inlineintgetAge()const{returnm_nAge;}inlineQStringgetName()const{returnm_sName;}private:intm_nAge;QString m_sName;};

使用QMap用自定义数据作为key,只需要重载operator<需要严格弱序

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进