目的

将QMap数据按照自定义规则输出,比如:

QMap<QString, qreal> map;

    map["hello"] = 0.0;
    map["world"] = 1.0;
    map["china"] = 0.5;
    map["earth"] = 2.0;
    map["sky"] = 0.7;
    map["ground"] = 4.0;

将以上map以 qreal 从小到大排序。
QMap的元素是按照键的升序排列的,这意味着当插入元素时,容器会根据键自动排序
默认排序为:

map : QMap((china, 0.5)(earth, 2)(ground, 4)(hello, 0)(sky, 0.7)(world, 1))

最终输出结果为:

QMap排序_升序

实现

如果需要按照值来排序,那需要将 QMap 的元素复制到一个 QList 中,并使用 STL 算法或者 QList 的排序函数进行排序。

QMap<QString, qreal> map;

    map["hello"] = 0.0;
    map["world"] = 1.0;
    map["china"] = 0.5;
    map["earth"] = 2.0;
    map["sky"] = 0.7;
    map["ground"] = 4.0;


    qDebug().noquote() << "[" << __FILE__ << __LINE__ << "]" << "map :" << map;

    // 将 QMap 的元素复制到 QList 中
    QList<QPair<QString, qreal>> list;
    for (QMap<QString, qreal>::const_iterator it = map.constBegin(); it != map.constEnd(); ++it) {
        list.append(qMakePair(it.key(), it.value()));
    }

    // 使用 std::sort 来根据值排序
    std::sort(list.begin(), list.end(), [](const QPair<QString, qreal> &p1, const QPair<QString, qreal> &p2) {
        return p1.second < p2.second;
    });

    // 输出排序后的列表
    for (const QPair<QString, qreal> &pair : list) {
        qDebug().noquote() << "[" << __FILE__ << __LINE__ << "]" << pair.first << ":" << pair.second;
    }

结果

hello : 0
china : 0.5
sky : 0.7
world : 1
earth : 2
ground : 4