gpt4 book ai didi

c++ - 如何使用多个排序键对列表进行排序

转载 作者:搜寻专家 更新时间:2023-10-31 01:17:04 27 4
gpt4 key购买 nike

我正在使用比较函数对 QList 进行排序MyClass 有 n 个不同的属性,如地址、年龄、名字、姓氏等

SortKey 是这样的。

typedef QPair<QString, Qt::SortOrder> SortKeyPair;         
//pair of attr name (i.e. gender and order of sorting asc|desc)


static bool compare( MyClass *o1, MyClass *o2)
{
//sortKey is global static var.
if (sortKey.second == Qt::AscendingOrder) {
if (o1->dataField(sortKey.first) < o2->dataField(sortKey.first)) return true;
else return false;
} else {
if (o1->dataField(sortKey.first) > o2->dataField(sortKey.first)) return true;
else return false;
}
return false;
}

按单个属性排序。与 qSort 配合使用效果很好。但我需要用多个属性排序的列表。比如“按姓氏排序,然后按年龄排序,然后按性别排序”

我需要一个排序函数来按多个 sortKey 排序(这不起作用!)

我们如何使用多个排序键进行排序?有没有可用的数据结构支持这个? (就像 map 总是根据给定的键对事物进行排序)

最佳答案

只需以逻辑方式定义谓词,使用主键进行比较,并在主键不确定时使用次键作为后备:

if (o1->dataField( firstSortKey ) < o2->dataField( firstSortKey ))
return true;
else if (o1->dataField( firstSortKey) > o2->dataField( firstSortKey ))
return false;
else if ( o1->dataField( secondSortKey ) < o2->dataField( secondSortKey ) )
return true;
else
return false;

或者,对于一般情况:

bool compare_on( int key_index, ...) {
if (o1->dataField( key[key_index] ) < o2->dataField( key[key_index] ))
return true;
else if (o1->dataField( key[key_index] ) > o2->dataField( key[key_index] ))
return false;
else if ( key_index == max_key_index )
return false;
else
return compare_on( key_index + 1 );

关于c++ - 如何使用多个排序键对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8469933/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com