[C++] 自定义C++比较器比较大小

1.容器分类

编程过程中,我们经常有这样的需求,

  1. 改变容器默认的排序,或者
  2. 让排序函数sort按照自定义的方式进行排序。

STL的容器主要有:

  1. 线性容器,vector, list, queue, deque, priority_queue
  2. 映射容器,set, unordered_set, map, unordered_map

其中有排序需求的是vector,priority_queue, set, map, 对于vector我们经常用sort函数进行排序,对于priority_queue, set, map内部会按照自定义的比较器在插入新值时自动排序。

2.自定义比较器

下面我们分析两种自定义顺序:

2.1 vector

我们既可以用比较函数来定义比较器,也可以用lamda表达式在定义比较器。

bool cmp1(int a, int b) {
     
	return a > b;
}
auto cmp2 = [](int a, int b) {
     	
	return a > b;
};
...
sort(v.begin(), v.end(), cmp1);
sort(v.begin(), v.end(), cmp2);

2.2 priority_queue

priority_queue默认是大顶堆,我们可以采取两种方式自定义堆,即lamba表达式和重载()运算符,对pq的lamba表达式写法可参考这里。

auto cmp2 = [](int a, int b) {
     	
	return a > b;
};
priority_queue<int, vector<int>, decltype(cmp2)> pq(cmp2);
struct cmp {
     
    bool operator()(int a, int b) {
     
        return a > b;
    }
};
priority_queue<int, vector<int>, cmp> pq;

——————————

https://blog.csdn.net/AAMahone/article/details/82787184

你可能感兴趣的:(C++)