QMap与QHash类

    QMap和QHash都是Qt里面的容器类,一般用来作为字典查询,索引使用,两者有着相似的用法和功能。

    两者的不同点在于:

    1. 在查找搜索的速度上, QHash比QMap要快;在算法复杂性度量上,QMap的搜索是O(logn),而QHash平均是O(1)[最坏的情况是O(n)]。为什么原因文档上没有说明,个人觉得在内部QHash是以整数作为key来查询的,而QMap则是以其他类型对象(比如QString等,当然也可以是整数)作为key,在比较算法上比整数要多花一些时间。

    2. 当使用iterator对QMap和QHash进行遍历时,QMap总是按照关键字的顺序进行遍历的,而QHash则是以任意序列进行遍历。索引如果需要得到排序的遍历结果时,应当使用QMap类。

    3. QMap的Key类型必须实现"<"比较运算符,用于Key的排序,而QHash则不同,它的Key类型需要实现“==”比较运算符,而且需要有一个全局的qHash函数将Key转换成整数类型的hash值。在C++和QT中可以用作qHash关键字的类型有:所有的整数类型(char,unsigned int,等),指针类型,QChar,QString,QByteArray。如果用其他类型作为Key则需要自行实现qHash函数和==比较操作符。


    另外,在QHash和QMap中查找一个关键字的值,可以使用value()函数和[ ]操作符。但是一般来说应该使用value()函数来进行查找。因为[ ]操作符在查询的key不存在的时候,会自动在列表中创建此关键字的一个项,从而造成不必要的内存开销。

你可能感兴趣的:(QMap与QHash类)