C++如何在STL中实现自定义排序和比较(自定义.排序.如何在.STL...)

wufei123 发布于 2025-09-11 阅读(1)
答案是使用自定义比较函数或Lambda表达式实现排序。在C++ STL中,std::sort可通过函数指针或Lambda自定义排序规则,如降序排列整数数组。

c++如何在stl中实现自定义排序和比较

在C++的STL中,自定义排序和比较主要通过

std::sort
等算法配合自定义比较函数或函数对象来实现。你可以根据数据类型或排序逻辑灵活定义比较方式,适用于基本类型、结构体、类对象等。 使用函数指针进行自定义比较

你可以定义一个返回

bool
类型的函数,接受两个参数,用于判断第一个是否应排在第二个之前。 示例:

对整数数组按降序排列:

bool greater(int a, int b) {<br>
    return a > b;<br>
}<br>
<br>
std::vector<int> nums = {5, 2, 8, 1};<br>
std::sort(nums.begin(), nums.end(), greater);

此时数组将按从大到小排序。

使用Lambda表达式(推荐方式)

C++11起支持Lambda,使自定义比较更简洁,尤其适合临时或简单逻辑。

std::vector<int> nums = {5, 2, 8, 1};<br>
std::sort(nums.begin(), nums.end(), [](int a, int b) {<br>
    return a < b; // 升序<br>
});

若要按绝对值排序:

std::sort(nums.begin(), nums.end(), [](int a, int b) {<br>
    return std::abs(a) < std::abs(b);<br>
});
对结构体或类进行自定义排序

当容器中存储的是结构体时,需明确比较规则。

PIA PIA

全面的AI聚合平台,一站式访问所有顶级AI模型

PIA226 查看详情 PIA

定义结构体:

struct Person {<br>
    std::string name;<br>
    int age;<br>
};

按年龄升序排序:

std::vector<Person> people = {{"Alice", 30}, {"Bob", 25}};<br>
std::sort(people.begin(), people.end(), [](const Person& a, const Person& b) {<br>
    return a.age < b.age;<br>
});

若年龄相同,再按名字字母顺序排:

return a.age == b.age ? a.name < b.name : a.age < b.age;
重载函数对象(仿函数)

定义一个类并重载

operator()
,可用于需要状态或复用的场景。

struct ComparePerson {<br>
    bool operator()(const Person& a, const Person& b) const {<br>
        return a.age < b.age;<br>
    }<br>
};<br>
<br>
std::sort(people.begin(), people.end(), ComparePerson{});

这种方式在作为容器(如

std::set
)的模板参数时特别有用。

基本上就这些。使用Lambda最方便,函数对象适合复杂或需状态的比较,函数指针兼容旧代码。关键是保证比较函数满足“严格弱序”:自反性、非对称性、传递性。不复杂但容易忽略。

以上就是C++如何在STL中实现自定义排序和比较的详细内容,更多请关注知识资源分享宝库其它相关文章!

相关标签: c++ 排列 数据类型 String sort const 结构体 bool int Lambda 指针 重载函数 Struct operator 对象 算法 大家都在看: C++0x兼容C吗? C/C++标记? c和c++学哪个 c语言和c++先学哪个好 c++中可以用c语言吗 c++兼容c语言的实现方法 struct在c和c++中的区别

标签:  自定义 排序 如何在 

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。