面试题答案
一键面试#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
class ComplexObject {
public:
int id;
float data1;
std::string data2;
};
bool customComparator(const ComplexObject& a, const ComplexObject& b) {
// 首先按照id的奇偶性
if (a.id % 2 != b.id % 2) {
return a.id % 2 > b.id % 2; // 奇数在前,偶数在后
}
// id奇偶性相同的情况
if (a.id % 2 == 1) {
// 奇数部分按data1从大到小排序
return a.data1 > b.data1;
} else {
// 偶数部分按data2的长度从小到大排序
if (a.data2.length() != b.data2.length()) {
return a.data2.length() < b.data2.length();
} else {
// data2长度相同则按字典序从大到小排序
return a.data2 > b.data2;
}
}
}
你可以这样使用这个比较函数:
int main() {
std::vector<ComplexObject> objects;
// 填充objects
std::sort(objects.begin(), objects.end(), customComparator);
return 0;
}