MST

星途 面试题库

面试题:C++ STL算法sort高度定制化排序规则

有一个自定义类 `ComplexObject`,它包含多个成员变量,如 `id`(整数)、`data1`(浮点数)、`data2`(字符串)等。现要求对 `std::vector<ComplexObject>` 进行排序,排序规则是:首先按照 `id` 的奇偶性,奇数在前偶数在后,且奇数部分按 `data1` 从大到小排序,偶数部分按 `data2` 的长度从小到大排序,如果 `data2` 长度相同则按字典序从大到小排序。请详细编写 `std::sort` 所需的自定义比较函数。
36.6万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#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;
}