[C++] 自定義C++比較器比較大小

virgilshi發表於2020-10-09

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

相關文章