因为项目使用QVector,太慢了,听说QMap比QVector查找时快,所以写一个小程序试试;

从30000个数据中找5000个

程序运行截图如下:

QVector

QMap

一样的数据,找一样的数

代码如下图:

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QVector>
#include <QMap>namespace Ui {
class Widget;
}typedef struct MyData{MyData(QString num1,QString num2,QString num3){m_num1=num1;m_num2=num2;m_num3=num3;}QString m_num1;QString m_num2;QString m_num3;
}MyData;typedef struct VecData{VecData(const qint64 num,const QString name){m_num=num;m_name=name;}qint64 m_num;QString m_name;QList<MyData*> m_list;
}VecData;class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();public slots:void vectorBtnClicked();void mapBtnClicked();private:Ui::Widget *ui;QVector<VecData*> m_myVec;QMap<qint64,VecData*> m_myMap;qint64 m_num[5000];};#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <time.h>
#include <QMessageBox>
#include <QTimer>
#include <QTime>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);this->setWindowTitle("CSDN IT1995");qint64 data=100000000;for(qint64 i=0;i<30000;i++){m_myVec.append(new VecData(data,"这个是name"));m_myMap.insert(data,new VecData(data,"这个是name"));for(int j=0;j<100;j++){m_myVec[i]->m_list.append(new MyData("10000","20000","30000"));(*m_myMap.find(data))->m_list.append(new MyData("10000","20000","30000"));}data++;}qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));for(int i=0;i<5000;i++){m_num[i]=qrand()%100000+100000000;}connect(ui->vectorPushButton,&QPushButton::clicked,this,&Widget::vectorBtnClicked);connect(ui->mapPushButton,&QPushButton::clicked,this,&Widget::mapBtnClicked);
}Widget::~Widget()
{delete ui;
}void Widget::vectorBtnClicked(){clock_t start,finish;double totaltime;start=clock();for(int i=0;i<5000;i++){for(int j=0;j<m_myVec.size();j++){if(m_num[i]==m_myVec[j]->m_num){qDebug()<<"Value:"<<m_myVec[j]->m_num;break;}}}finish=clock();totaltime=(double)(finish-start)/CLOCKS_PER_SEC;qDebug()<<"此程序的运行时间为"<<totaltime<<"秒!";QMessageBox::information(this,"提示","使用了"+QString::number(totaltime,'f',5)+"秒");
}void Widget::mapBtnClicked(){clock_t start,finish;double totaltime;start=clock();for(int i=0;i<5000;i++){qDebug()<<"Value:"<<(*m_myMap.find(m_num[i]))->m_num;}finish=clock();totaltime=(double)(finish-start)/CLOCKS_PER_SEC;qDebug()<<"\n此程序的运行时间为"<<totaltime<<"秒!";QMessageBox::information(this,"提示","使用了"+QString::number(totaltime,'f',5)+"秒");
}

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

Qt工作笔记-QVector与QMap查找效率实战相关推荐

  1. Qt工作笔记-QHash与QMap查找速度粗略比较实战

    因为工作需要,要大量用到查找,关于查找,在Qt中比较常用的就两个,一个QHash,一个QMap, 关于谁快,谁慢,官方已经给出了答案 但我们来实战下,因为时间复杂度的多少,在真实运行情况下有的时候,差 ...

  2. Qt工作笔记-QVector下标访问和迭代访问效率实践(大跌狗眼)

    IDE为Qt Creator 版本为5.7 编译器为MinGW 这个实验感觉与编译器有关(优化)Debug和Release也有关 下面所有的过程都是以Debug版本进行!!!! 程序界面很low,如下 ...

  3. C++\Python\Qt工作笔记-读取txt文件查找某行是否包含keyWord

    文本内容如下: python源码如下: if __name__ == '__main__':f=open('demo.txt')line=f.readline()while line:if 'keyW ...

  4. Qt工作笔记-发送端发送Json格式的数据包,接收端解析数据包

    原理以及运行 原理是因为QJsonDocument提供了一个函数toJson 可以直接把Json数据转成QByteArray,这样就可以直接发送数据包,然后再按照常规方法解析即可,本源码中含解析内容, ...

  5. Qt工作笔记-自定义模型【继承QAbstractTableModel】

    程序运行截图如下: 代码如下: mymodel.h #ifndef MYMODEL_H #define MYMODEL_H#include <QAbstractTableModel> #i ...

  6. Qt工作笔记-QMap查找时要注意的问题(使用contains)

    如下有问题的代码: #include <QCoreApplication> #include <QMap> #include <QDebug>int main(in ...

  7. Qt工作笔记-QList (链表) QVector (数组)【转载】

    原文地址:https://blog.csdn.net/qq_33266987/article/details/53333373 C++中的list 和 vector (1). stl提供了三个最基本的 ...

  8. Qt|C++工作笔记-QVector与Vector去重复的值

    Qt中没有unique函数,只能用遍历的方法了,代码如下: #include <QApplication> #include <QDebug> #include <QSt ...

  9. Qt工作笔记-QMap的进一步操作

    QMap可以放如下类型的数据(key里面放一个类) clear前,内部数据析构后 代码如下: #include <QApplication> #include <QMap> # ...

最新文章

  1. phpstorm 10 修改背景图片和字体
  2. Python 列表复制
  3. Java Set集合详解及Set与List的区别
  4. MAVEN版本依赖的原则及scope
  5. 关闭窗体后,进程仍然在运行的问题重现与解决
  6. 2016云栖大会马云畅谈未来五大创新趋势
  7. 【JAVA编码专题】UNICODE,GBK,UTF-8区别
  8. 如何使用代码获得ABAP repository object不同版本的内容
  9. php 控制304,php静态文件返回304技巧分享
  10. JAVA基础:从一道面试题看逻辑运算符与、|与||的区别
  11. 实验四 用信号量解决进程互斥与同步问题 生产者与消费者问题模拟
  12. 苹果id怎么注册?老果粉教你创建新的Apple ID
  13. java——MP3转wav
  14. python qq邮箱,Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
  15. [读书笔记]2.标准误差 标准差 信度 实例计算说明
  16. 前端iPhone刘海屏适配
  17. 可由线性表示且表达式唯一_典型例题解析例1设向量问取何值时可由线性表示且表示.doc...
  18. 走进互联网0基础秒杀-彭亮-专题视频课程
  19. 安装包制作工具NSIS (NullSoft Scriptable Install System)
  20. Dev-C++ 实用安装教程

热门文章

  1. 如何利用Python播放和录制声音
  2. NLP算法工程师对NLP的一些看法
  3. 飞鸽传书程序IT基础架构和应用的管理
  4. 【飞秋】使用C# 4编写动态的代码
  5. javascript一次性更换访问统计代码
  6. Python有多火,来看一份24小时榜单,从入门到进阶
  7. 谁天生就是干程序员的料?
  8. 奉劝那些想学编程的人
  9. 谁才是2019最火爆的编程语言,看这篇就够了
  10. Facebook 正在大规模重构 React Native