c++stl优先队列lambda比较函数
STL(Standard Template Library)是C++标准库的一部分,提供了丰富的数据结构和算法,能够为开发者提供方便、高效的工具。在STL中,优先队列(priority_queue)是一个常用的数据结构,它类似于队列,但是在弹出元素时会按照优先级顺序进行排序。
在使用优先队列时,我们经常需要指定元素的比较方式,以确定元素的优先级顺序。STL中提供了一种方便的方式来指定比较函数,即通过lambda表达式来定义比较函数。lambda表达式是C++11引入的新特性,它可以方便地定义匿名函数,非常适合用于指定比较函数。
在STL中,优先队列的默认比较函数是less,即元素按照从大到小的顺序进行排序。如果我们需要自定义比较函数来改变排序方式,可以使用lambda表达式来实现。
下面是一个使用lambda表达式实现自定义比较函数的例子:
lambda编程
```cpp
#include <queue>
#include <functional>
#include <iostream>
int main() {
std::priority_queue<int, std::vector<int>, decltype([](int a, int b) { return a > b; })> pq;
pq.push(3);
pq.push(1);
pq.push(4);
pq.push(1);
while (!pq.empty()) {
std::cout << pq.top() << ' ';
pq.pop();
}
return 0;
}
```
在上面的例子中,我们首先创建了一个优先队列pq,指定了元素类型为int,并通过decltype关键字来定义lambda表达式作为比较函数。在lambda表达式中,我们指定了两个参数a和b,然后返回a>b来实现从小到大的排序方式。
当我们运行这段代码时,输出结果为:1 1 3 4,表明元素按照从小到大的顺序进行排序。
通过lambda表达式来定义比较函数,可以非常方便地实现自定义的排序方式。比如,我们也可以使用lambda表达式来实现根据元素的绝对值大小进行排序:
```cpp
#include <queue>
#include <functional>
#include <iostream>
#include <cmath>
int main() {
std::priority_queue<int, std::vector<int>, decltype([](int a, int b) { return abs(a) < abs(b); })> pq;
pq.push(3);
pq.push(-1);
pq.push(4);
pq.push(-2);
while (!pq.empty()) {
std::cout << pq.top() << ' ';
pq.pop();
}
return 0;
}
```
在上面的例子中,我们在lambda表达式中使用了abs函数来比较元素的绝对值大小,从而实现按照绝对值大小进行排序。
除了使用lambda表达式,我们也可以使用普通的函数对象(Functor)来定义比较函数。比如,下面是一个使用函数对象实现比较函数的例子:
```cpp
#include <queue>
#include <functional>
#include <iostream>
struct Compare {
bool operator()(int a, int b) {
return a % 10 < b % 10;
}
};
int main() {
std::priority_queue<int, std::vector<int>, Compare> pq;
pq.push(13);
pq.push(25);
pq.push(7);
pq.push(49);
while (!pq.empty()) {
std::cout << pq.top() << ' ';

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。