因为项目使用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_OBJECT

public:
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();
}
 
---------------------
作者:草莓蛋糕人
来源:CSDN
原文:https://blog.csdn.net/u014746838/article/details/83504246
版权声明:本文为博主原创文章,转载请附上博文链接!

QVector与QMap查找效率实战(QMap快N倍,因为QVector是数组,QMap是有序二叉树,查找的时候是N和LogN的速度对比)的更多相关文章

  1. 何在mysql查找效率慢的SQL语句?

    如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow-queries[=file_name]选项启 ...

  2. List和Dictionary泛型类查找效率浅析

    List和Dictionary泛型类查找效率存在巨大差异,前段时间亲历了一次.事情的背景是开发一个匹配程序,将书籍(BookID)推荐给网友(UserID),生成今日推荐数据时,有条规则是同一书籍七日 ...

  3. python 字典有序无序及查找效率,hash表

    刚学python的时候认为字典是无序,通过多次插入,如di = {}, 多次di['testkey']='testvalue' 这样测试来证明无序的.后来接触到了字典查找效率这个东西,查了一下,原来字 ...

  4. MySQL数据库中的字段类型varchar和char的主要区别是什么?哪种字段查找效率要高?

    1,varchar与char的区别?(1)区别一,定长和变长,char表示定长,长度固定:varchar表示变长,长度可变.当插入字符串超出长度时,视情况来处理,如果是严格模式,则会拒绝插入并提示错误 ...

  5. python中in在list和dict中查找效率比较

    转载自:http://blog.csdn.net/wzgbm/article/details/54691615 首先给一个简单的例子,测测list和dict查找的时间: ,-,-,-,-,,,,,,] ...

  6. 基于Python实现二分查找法实战

    二分查找法实战 def binary_search(datasets, find_in): mid = int(len(datasets)/2) if(mid>0): if(find_in> ...

  7. 实战-DRF快速写接口(认证权限频率)

    实战-DRF快速写接口 开发环境 Python3.6 Pycharm专业版2021.2.3 Sqlite3 Django 2.2 djangorestframework3.13 测试工具 Postma ...

  8. grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)

    这篇长文历时近两天终于完成了,前两天帮网站翻译一篇文章“为什么GNU grep如此之快?”,里面提及到grep速度快的一个重要原因是使用了Boyer-Moore算法作为字符串搜索算法,兴趣之下就想了解 ...

  9. grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)(转)

    这篇长文历时近两天终于完成了,前两天帮网站翻译一篇文章“为什么GNU grep如此之快?”,里面提及到grep速度快的一个重要原因是使用了Boyer-Moore算法作为字符串搜索算法,兴趣之下就想了解 ...

随机推荐

  1. 性能指标:TPS 并发数 响应时间 QPS

    响应时间(RT)reponse time指系统对请求作出响应的时间.一般关注平均响应时间和最大响应时间.对于单机没有并发操作的应用系统而言,普遍认为响应时间是一个合理且准确的性能指标,但响应时间并不能 ...

  2. [清华集训2016]如何优雅地求和——NTT

    题目链接: [清华集训2016]如何优雅地求和 题目大意:给出一个多项式$m+1$个点值$a_{0},a_{1}...a_{m}$(其中$f(i)=a_{i}$),并给出两个数$n,x$,求$Q(f, ...

  3. 【软件工程】Alpha冲刺(1/6)

    链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 了解了反馈机制的实现原理 确定好算法的框架 对接口的规范化进行学习 展示Git ...

  4. 黑马lavarel教程---12、lavarel验证码

    黑马lavarel教程---12.lavarel验证码 一.总结 一句话总结: 用插件的时候仔细看插件的版本要求 1.lavarel安装验证码插件的时候,如果(可选)需要定义自己的配置,则需要生成配置 ...

  5. StackTraceElement 源码阅读

    StackTraceElement 属性说明 /** * 每个 StackTraceElement 对象代表一个独立的栈帧,所有栈帧的顶部是一个方法调用 * @since 1.4 * @author ...

  6. 使用EasyPrint实现不预览直接打印功能_非JS打印

    插件地址 github 下载插件,安装后将在注册表中添加EasyPrint的协议 随后可以在开始->运行中输入EasyPrint://1&test 进行测试  参数分为两部分使用[&am ...

  7. numpy之填充为nan的数据为该列平均值

    # coding=utf-8 import numpy as np ''' 填充nan的数据,为该列的平均值 ''' def fill_ndarray(t1): for i in range(t1.s ...

  8. WCF绑定(Binding)

    一个Binding由一个有序的binding元素栈所组成,其中的每一个元素都指定了连接到ServiceEndpoint的一个方面.在这个栈中的最底两层都是必须要有的.最底下的一层是传输binding元 ...

  9. 五十三:WTForms表单验证之常用验证器

    Email:验证数据是否为邮箱EqualTo:验证此字段的数据是否和另一个字段的值相等,常用与校验密码和确认密码InputRequired:检验数据必传Length:校验数据长度NumberRange ...

  10. 虚拟机安装: vmware + ubuntu16.04

    参考博客:https://blog.csdn.net/qq1326702940/article/details/82322079 这个博客讲的很详细,只要ubuntu版本相同,应该是一模一样. 注意点 ...