在c++++中,stl的sort()和priority_queue支持自定义排序规则。1. sort()函数通过传入比较函数或lambda表达式实现自定义排序,如按成绩从高到低排序学生结构体;2. priority_queue需提供比较器作为模板参数,如实现最小堆处理任务优先级;3. 仿函数适合复用和复杂逻辑,lambda则用于一次性简洁操作。掌握这些方法可灵活应对不同排序需求。

在C++中,STL(标准模板库)为我们提供了非常方便的排序工具,比如
sort()
priority_queue

下面我们就来看看如何灵活使用这些工具实现自定义排序。

sort()
std::sort()
举个例子:

我们有一个学生结构体,想要按照成绩从高到低排序:
struct Student {
string name;
int score;
};
bool compareByScore(const Student& a, const Student& b) {
return a.score > b.score; // 成绩高的排前面
}
vector<Student> students = {{"Alice", 88}, {"Bob", 95}, {"Charlie", 70}};
sort(students.begin(), students.end(), compareByScore);你也可以用lambda表达式简化代码:
sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
return a.score > b.score;
});注意点:
stable_sort()
vector
deque
priority_queue
priority_queue
vector
举个场景:
我们要实现一个最小堆来保存任务,任务优先级越小越先执行:
struct Task {
int priority;
string description;
};
// 自定义比较器
struct CompareTask {
bool operator()(const Task& a, const Task& b) {
return a.priority > b.priority; // 小优先
}
};
priority_queue<Task, vector<Task>, CompareTask> taskQueue;
taskQueue.push({3, "Write code"});
taskQueue.push({1, "Fix bug"});
taskQueue.push({2, "Test feature"});此时,
Fix bug
关键点:
operator()
function<bool(T,T)>
std::priority_queue
在实际开发中,很多人会纠结该用仿函数(functor)还是lambda表达式。
仿函数的优点:
Lambda的优点:
比如上面的sort排序,如果只用一次,用lambda就足够;但如果多个地方都需要同样的排序规则,建议封装成仿函数。
基本上就这些。掌握好这些方法之后,就能根据具体需求灵活地使用STL中的排序功能了。
以上就是怎样使用STL实现自定义排序 灵活运用sort和priority_queue的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号