C++优先队列如何自定义排序
时间: 2024-06-17 16:00:29 浏览: 125
优先级队列的C++实现
C++中的优先队列是一种特殊的容器,它会按照元素的优先级自动进行排序。默认情况下,C++中的优先队列使用std::less作为比较函数,也就是说,元素的优先级越高,它们在队列中的位置越靠前。
如果你想自定义优先队列中元素的排序方式,可以通过定义一个比较函数来实现。比较函数需要满足严格弱序关系,也就是说对于元素a和b,比较函数返回true时,a应该排在b的前面。
以下是一个示例代码,展示如何自定义一个基于字符串长度的优先队列:
```
#include <iostream>
#include <queue>
#include <string>
using namespace std;
struct cmp {
bool operator() (const string& a, const string& b) {
return a.length() > b.length();
}
};
int main() {
priority_queue<string, vector<string>, cmp> pq;
pq.push("apple");
pq.push("banana");
pq.push("pear");
pq.push("orange");
while (!pq.empty()) {
cout << pq.top() << " ";
pq.pop();
}
return 0;
}
```
在上面的代码中,我们定义了一个名为cmp的结构体,并重载了其()运算符。cmp结构体作为优先队列的第三个参数传入,指定了我们自定义的比较函数。这里我们定义了一个基于字符串长度的比较函数,让长度较小的字符串排在前面。
阅读全文