目的
将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 的元素复制到一个 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