📜  在 sort cpp 中传递自定义函数 - C++ (1)

📅  最后修改于: 2023-12-03 15:37:31.652000             🧑  作者: Mango

在 sort cpp 中传递自定义函数 - C++

在 C++ 中,标准库提供了一个 sort 函数,可以对容器进行排序,而且该函数可以接受一个自定义函数作为参数,从而实现根据不同的规则进行排序。本文将介绍如何在 sort 函数中传递自定义函数。

sort 函数

在介绍 sort 函数如何传递自定义函数之前,先简单介绍一下 sort 函数的基本用法。

sort 函数属于算法库,所以需要包含头文件 <algorithm>,同时 sort 函数接受两个迭代器,分别表示容器的起始和结束位置。

#include <algorithm>
#include <vector>

int main() {
    std::vector<int> nums{ 5, 2, 7, 1, 9 };
    std::sort(nums.begin(), nums.end()); // 默认从小到大排序
    return 0;
}

在上述代码中,sort 函数默认从小到大排序。

自定义排序函数

现在假设我们想要按照字符串的长度从小到大排序,那么我们需要自定义一个排序函数,并将该函数作为 sort 函数的参数。

该自定义排序函数以指针方式传递给 sort,指针类型为一个函数,它需要两个参数,返回类型为 bool。

#include <algorithm>
#include <iostream>
#include <string>
#include <vector>

bool compare(std::string* s1, std::string* s2) {
    return s1->length() < s2->length();
}

int main() {
    std::vector<std::string> strs{ "hello", "world", "cpp", "sort" };
    std::vector<std::string*> pstrs;
    for (auto& str : strs) {
        pstrs.push_back(&str);
    }
    std::sort(pstrs.begin(), pstrs.end(), compare);
    for (auto& pstr : pstrs) {
        std::cout << *pstr << std::endl;
    }
    return 0;
}

上述代码中,自定义的 compare 函数以指针方式传递给 sort。

总结

本文介绍了如何自定义排序函数并在 sort 函数中传递。此功能可用于根据自定义规则对容器进行排序。