C++ priority_queue為例的比較函式
很多時候,我們需要過載諸如priority_queue中的比較函式。在這其中有一些小細節,如下:
1、經典錯誤及解決方案
1.1錯誤寫法
struct node
{
public:
node()
{
a = 1;
}
bool operator < (node b)
{
return a < b.a;
}
int a;
};
這樣的比較函式在priority_queue容器中是無法通過的。
如圖,轉載自某某同學:
可以看到,裡面用了const修飾。(MSVC的實現)
1.2正確示例
1.2.1示例一
struct node
{
public:
node()
{
a = 1;
}
bool operator < (const node& b) const
//dev中可以寫bool operator < (node b) const
{
return a < b.a;
}
int a;
};
1.2.2示例二
struct cmp
{
bool operator ()(node a , node b){
return a.a < b.a;
}
};
呼叫的時候,如下:
priority_queue<node, vector<node>, cmp> q;
2、細節部分
如果兩者同時存在,即既有在內部實現<的過載。又在外部實現 struct cmp中()的過載,並且在呼叫的時候兩者一起呼叫,示例如下:
#include<bits/stdc++.h>
using namespace std;
struct node
{
public:
node(int n)
{
a = n;
}
bool operator < ( node b) const
{
return a > b.a;
}
int a;
};
struct cmp
{
bool operator ()(node a , node b){
return a.a < b.a;
}
};
int main()
{
priority_queue<node, vector<node>, cmp> q;
q.emplace(3);
q.emplace(1);
node p = q.top();
q.pop();
cout<<p.a<<endl;
return 0;
}
執行結果:
這裡,我們需要注意的是:priority_queue是從隊尾彈出元素。也就是如果過載函式是要求從小到大排序,那麼就會彈出最大的那個元素。
結論:在這裡,我們的結論為:實際上priority_queue採用的是struct cmp中對()的過載。
具體原因不清楚,若有知情者,希望能指點指點鄙人
相關文章
- C++宏和函式的比較C++函式
- C與C++在函式和資料的比較C++函式
- 字串比較的常用函式字串函式
- excel 字元比較函式Excel字元函式
- JavaScript - 函式 setTimeout 和 setInterval 的比較JavaScript函式
- MySQL:MySQL層比較函式呼叫MySql函式
- [C++] 自定義C++比較器比較大小C++
- C++類將函式模板宣告為友元 例項C++函式
- JavaScript 匿名函式與具名函式執行效率比較JavaScript函式
- 比較重要的例題
- Python有哪些比較重要的內建函式?Python函式
- cmp是可選的自定義比較函式函式
- c/c++ 標準庫 set 自定義關鍵字型別與比較函式C++型別函式
- Go 與 C++ 的對比和比較GoC++
- DB2常用函式與Oracle比較TIDB2函式Oracle
- Python培訓教程:Python有哪些比較重要的內建函式?Python函式
- 使用jiffies的時間比較函式time_after、time_before函式
- C++與Rust變數宣告的比較C++Rust變數
- c++的remove函式C++REM函式
- 建構函式顯式返回 this 在 new 運算及 call 方法中的比較函式
- C++ STL 優先佇列 (priority_queue)C++佇列
- C++函式C++函式
- c++中物件的引用作為函式的引數C++物件函式
- 面試官:請寫一個你認為比較“完美”的單例面試單例
- C++之類解構函式為什麼是虛擬函式C++函式
- fill函式與memset函式的區別(c++)函式C++
- C++與Rust操作裸指標的比較C++Rust指標
- C++與Rust引用外部符號的比較C++Rust符號
- 關於c、c++之前比較模糊的概念C++
- C++ 函式 realloc 的用法C++函式
- c++ map和unordered_map比較C++
- c++ Beep函式C++函式
- c++函式模板C++函式
- C++ 建構函式和解構函式C++函式
- C++ 返回函式指標的函式C++函式指標
- C++:類的成員函式C++函式
- C++中的回撥函式C++函式
- C++中函式呼叫的用法C++函式