QMap的升序排序,巧妙避开默认排序规则。

结论:QMap的升序排序是指对key值的首字母的Ascii码顺序来确定的。

以下通过一个示例来看看QMap怎么排序的。
ASCII码表:
QMap的升序排序,巧妙避开默认排序规则。_第1张图片
示例:

    QMap map;
    QStringList list;
    list<<"1"<<"2"<<"3"<<"11"<<"21"<<"!"<<"/"<<":"<<"A"<<"/A"<<"!:"<<"A1";
    for (int i = 0; i < list.size(); ++i) {
        map.insert(list[i],QString::number(i));
    }

    for (QMap::const_iterator it = map.begin(); it != map.end(); it++) {
        qDebug()<

结果:
QMap的升序排序,巧妙避开默认排序规则。_第2张图片

从插入规则和结果,对照ASCII码表不难看出map的排序都是按照key值首字母的顺序来排序的,
我们现在把list改成 :
list<<“1”<<“2”<<“3”<<“11”<<“21”<<“!”<<“/”<<“:”<<“A”<<“/A”<<“!:”<<“A1”<<“/1”<<“/:”;
结果:
QMap的升序排序,巧妙避开默认排序规则。_第3张图片
可以看出多个字符的key值,首字母排序后,如果首字母相同,则从第二个字母按照ASCII顺序来排序。

通过以上规律当我们需要顺序排序时,就不要将key值的类型定义为QString、QByteArray等字符串类型,而需要定义为int型。
如下示例:

    QMap map;
    QList list;
    list<<1<<2<<3<<11<<21<<'!'<<'/'<<':';
    for (int i = 0; i < list.size(); ++i) {
        map.insert(list[i],QString::number(i));
    }

    for (QMap::const_iterator it = map.begin(); it != map.end(); it++) {
        qDebug()<

结果:
QMap的升序排序,巧妙避开默认排序规则。_第4张图片

你可能感兴趣的:(QT,c/c++,c++,开发语言)