[問題] compare function object 的相關用法
編譯器:
Mingw-w64
用 C++11 下去編
問題(Question):
標題可能下的不太好...
先講問題,看到幾個 priority_queue 在指定自己的比較方法時的寫法:
1. 這邊的 compare 只是 function
std::priority_queue<Node, std::vector<Node>, bool (*)(Node, Node)>
PQ(compare)
不太理解 bool (*)(Node, Node) 這個的寫法是什麼,有甚麼名稱嗎?
也可以直接用 lambda expression
priority_queue<node, vector<node>, bool (*)(const node &, const node &)>
PQ([](const node &a, const node &b) -> bool {
return a.v > b.v;
});
---
以下順便討論幾個常用(?)的作法:
第一種
平常解題在寫自定義的比較時
通常是直接去 overload < 然後用預設的 std::less 去比較。
struct node
{
//...
bool operator<(const node &a) const
{
return value > a.value;
}
};
第二種
則是寫成 class 後去 overload ()
//in class Compare
public:
bool operator() (node, node)
{
//return ...;
}
std::priority_queue<node, std::vector<node>, Compare> PQ;
第三種
利用 std::function,不過這個我幾乎沒用過,
並沒有很了解...
大致上的理解是把它當作 wrapper 可以拿來存
function object, function, lambda expression 之類的東西。
//compare 只是 function
std::priority_queue<node, std::vector<node>, std::function<bool(node, node)>>
PQ(compare);
感覺跟問題的有點像,我的想法是宣告的第三個欄位
是要放拿來比較用的 class type,
所以其實 std::function<bool(node, node)> 會是一個type嗎?!
--
有錯還煩請指正,謝謝!
有時想拿解題來練習一些 C++ 平常比較少用的語法和特性(當然是指我少用的),
就會發現自己似乎從沒好好學過 C++ ...
-
以上參考:
http://en.cppreference.com/w/cpp/container/priority_queue
https://goo.gl/tPvED4
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 134.208.52.240
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1520435583.A.218.html
→
03/07 23:23,
8年前
, 1F
03/07 23:23, 1F
打完突然覺得沒甚麼問題了,應該就只是function pointer的宣告而已...
恩似乎也不能刪文...
※ 編輯: NaiveRed (134.208.52.240), 03/07/2018 23:37:39
→
03/08 01:55,
8年前
, 2F
03/08 01:55, 2F
→
03/08 01:55,
8年前
, 3F
03/08 01:55, 3F
→
03/08 01:56,
8年前
, 4F
03/08 01:56, 4F
→
03/08 02:00,
8年前
, 5F
03/08 02:00, 5F
→
03/08 02:00,
8年前
, 6F
03/08 02:00, 6F
哦哦!那看來原本的寫法就是宣告function沒錯了。
※ 編輯: NaiveRed (134.208.52.240), 03/08/2018 09:06:34
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章