答案是使用自定义比较函数或Lambda表达式实现排序。在C++ STL中,std::sort可通过函数指针或Lambda自定义排序规则,如降序排列整数数组。

在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);
此时数组将按从大到小排序。
立即学习“C++免费学习笔记(深入)”;
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>
});
当容器中存储的是结构体时,需明确比较规则。
定义结构体:
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中实现自定义排序和比较的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号