QMap与QHash的对比

发布于:2024-07-17 ⋅ 阅读:(52) ⋅ 点赞:(0)

在看书(Qt 5.9 C++开发指南)的时候,书上写:

QMap存储数据是按照键的顺序,如果不在乎存储顺序,使用QHash会更快。

实现方式:提供一个字典(关联数组),一个键映射到一个值。

实验: 

    QMap<QString,int> map;
    map["123"]=1;
    map["21"]=2;
    map["111111111111"]=-1;
    map["33333"]=4;
    map["1"]=-2;
    QMap<QString,int>::Iterator iter;
    for(iter = map.begin();iter != map.end();iter++)
    {
        qDebug()<<iter.key()<<"  "<<iter.value();
    }

"1" -2

"111111111111" -1

"123" 1

"21" 2

"33333" 4

    QMap<int,QString> map;
    map[123]="1";
    map[21]="2";
    map[11111111]="-1";
    map[33333]="4";
    map[1]="-2";
    QMap<int,QString>::Iterator iter;
    for(iter = map.begin();iter != map.end();iter++)
    {
        qDebug()<<iter.key()<<"  "<<iter.value();
    }

1 "-2"

21 "2"

123 "1"

33333 "4"

11111111 "-1"

可以知道:QMap存储数据是按照键顺序来存储的。

QString按照字典序

int按照数值大小 

QHash

基于散列表来实现字典功能

速度非常快

数据项是任意顺序的


    QHash<QString,int> map;
    map["123"]=1;
    map["21"]=2;
    map["111111111111"]=-1;
    map["33333"]=4;
    map["1"]=-2;
    QHash<QString,int>::Iterator iter;
    for(iter = map.begin();iter != map.end();iter++)
    {
        qDebug()<<iter.key()<<"  "<<iter.value();
    }

运行了三次,结果都不一样 

 "1" -2

"111111111111" -1

"21" 2

"123" 1

"33333" 4

 "21" 2

"111111111111" -1

"123" 1

"33333" 4

"1" -2

"111111111111" -1

"21" 2

"123" 1

"33333" 4

"1" -2

    QHash<int,QString> map;
    map[123]="1";
    map[21]="2";
    map[11111111]="-1";
    map[33333]="4";
    map[1]="-2";
    QHash<int,QString>::Iterator iter;
    for(iter = map.begin();iter != map.end();iter++)
    {
        qDebug()<<iter.key()<<"  "<<iter.value();
    }

11111111    "-1"
1    "-2"
21    "2"
123    "1"
33333    "4"