c++的优先队列,使用自定义函数 bool cmp()来作为优先的定义
时间: 2024-10-11 17:08:08 浏览: 10
在C++中,优先队列(Priority Queue)是一种特殊的容器,它内部实现了堆数据结构,可以保证元素总是按照给定的比较规则(这里就是通过自定义函数bool cmp())保持一定的优先级顺序。当你使用自定义的比较函数cmp(),你需要提供一个二元函数,这个函数接受两个类型的对象,并返回true如果第一个对象应该排在第二个对象之前,反之则返回false。
例如,假设你有一个Person类,你想根据他们的年龄来进行排序,你可以这样做:
```cpp
struct Person {
string name;
int age;
// 自定义比较函数,根据年龄排序
bool operator<(const Person& other) const {
return cmp(age, other.age);
}
};
// 定义自定义比较函数
bool cmp(int a, int b) {
return a < b; // 或者根据实际需求进行其他判断,比如更年长者优先
}
void main() {
priority_queue<Person, vector<Person>, decltype(&cmp)> pq(cmp); // 使用cmp作为比较函数
// 插入元素并自动按年龄排序
pq.push({ "Alice", 30 });
pq.push({ "Bob", 25 });
while (!pq.empty()) {
cout << pq.top().name << " (" << pq.top().age << ")\n";
pq.pop();
}
}
```
在这个例子中,`priority_queue<Person>`创建了一个优先队列,它的底层是vector存储,比较操作依赖于cmp函数。每次从队列顶部弹出的元素都是当前队列中优先级最高的。
阅读全文