QVector与QMap查找效率实战(QMap快N倍,因为QVector是数组,QMap是有序二叉树,查找的时候是N和LogN的速度对比)
因为项目使用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的速度对比)的更多相关文章
- 何在mysql查找效率慢的SQL语句?
如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow-queries[=file_name]选项启 ...
- List和Dictionary泛型类查找效率浅析
List和Dictionary泛型类查找效率存在巨大差异,前段时间亲历了一次.事情的背景是开发一个匹配程序,将书籍(BookID)推荐给网友(UserID),生成今日推荐数据时,有条规则是同一书籍七日 ...
- python 字典有序无序及查找效率,hash表
刚学python的时候认为字典是无序,通过多次插入,如di = {}, 多次di['testkey']='testvalue' 这样测试来证明无序的.后来接触到了字典查找效率这个东西,查了一下,原来字 ...
- MySQL数据库中的字段类型varchar和char的主要区别是什么?哪种字段查找效率要高?
1,varchar与char的区别?(1)区别一,定长和变长,char表示定长,长度固定:varchar表示变长,长度可变.当插入字符串超出长度时,视情况来处理,如果是严格模式,则会拒绝插入并提示错误 ...
- python中in在list和dict中查找效率比较
转载自:http://blog.csdn.net/wzgbm/article/details/54691615 首先给一个简单的例子,测测list和dict查找的时间: ,-,-,-,-,,,,,,] ...
- 基于Python实现二分查找法实战
二分查找法实战 def binary_search(datasets, find_in): mid = int(len(datasets)/2) if(mid>0): if(find_in> ...
- 实战-DRF快速写接口(认证权限频率)
实战-DRF快速写接口 开发环境 Python3.6 Pycharm专业版2021.2.3 Sqlite3 Django 2.2 djangorestframework3.13 测试工具 Postma ...
- grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)
这篇长文历时近两天终于完成了,前两天帮网站翻译一篇文章“为什么GNU grep如此之快?”,里面提及到grep速度快的一个重要原因是使用了Boyer-Moore算法作为字符串搜索算法,兴趣之下就想了解 ...
- grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)(转)
这篇长文历时近两天终于完成了,前两天帮网站翻译一篇文章“为什么GNU grep如此之快?”,里面提及到grep速度快的一个重要原因是使用了Boyer-Moore算法作为字符串搜索算法,兴趣之下就想了解 ...
随机推荐
- Linux停止被占用的端口
查找被占用的端口:netstat -lnp|grep 80 查看80端口被那些服务占用. kill掉该进程 kill -9 5574 然后在去查看一下80被占用的情况netstat -lnp|grep ...
- Druid连接池(无框架)
关于连接池有不少技术可以用,例如c3p0,druid等等,因为druid有监控平台,性能在同类产品中算top0的.所以我采用的事druid连接池. 首先熟悉一个技术,我们要搞明白,为什么要用他, 他能 ...
- Python全栈开发第5天作业
作业一:1) 将用户信息数据库文件和组信息数据库文件纵向合并为一个文件/1.txt(覆盖) 2) 将用户信息数据库文件和用户密码数据库文件纵向合并为一个文件/2.txt(追加) 3) 将/1.txt. ...
- LC 954. Array of Doubled Pairs
Given an array of integers A with even length, return true if and only if it is possible to reorder ...
- js图片轮播效果实现代码
首先给大家看一看js图片轮播效果,如下图 具体思路: 一.页面加载.获取整个容器.所有放数字索引的li及放图片列表的ul.定义放定时器的变量.存放当前索引的变量index 二.添加定时器,每隔2秒钟i ...
- centos的KVM初级安装
什么是KVM虚拟化技术?KVM(Kernel-based Virtual Machine),主流虚拟化技术之一,集成与Linux2.6之后版本中,通过linux内核提供任务调度及管理.kvm,在实现虚 ...
- zabbix客户端监控
1.安装zabbix客户端软件: yum install -y zabbix20-agent2.修改配置文件vim /etc/zabbix_agentd.conf修改如下: (1)更改Server,S ...
- docker批量删除容器、镜像(转载)
1.删除所有容器 docker rm `docker ps -a -q` 2.删除所有镜像 docker rmi `docker images -q` 3.按条件删除镜像 没有打标签 docker r ...
- koa cookie使用
1 .Koa 中设置 Cookie 的值 ctx.cookies.set(name, value, [options]) 通过 options 置 设置 cookie name 的 value : ...
- docker上传私有仓库报错
docker 1.17 版本搭建私有仓库,上传镜像报错:server gave HTTP response to HTTPS client” 系统环境:centos7docker版本:1.17(注意版 ...