我已經在一些奇怪的使用priority_queue的迷迷糊糊的,我很想獲得爲什麼地球上它的plausibile /有效的priority_queue聲明中使用這樣的一些適當的解釋:Priority_queue仿函數使用C++
typedef priority_queue<RandomContainer, **vector<RandomContainer>**, FunctorName> NewQueueName;
讓我們說,我們已經得到了一些結構稱爲SPerson:
struct SPerson
{
int age;
string name;
string surname;
};
和一些仿函數,這將有助於隊列中的所有元素進行排序因此我們likeing:
struct TheWayILike
{
bool operator()(const SPerson &name1, const SPerson &name2)
{
if(name1.name > name2.name) return true;
if(name1.name < name2.name) return false;
return false;
}
};
現在我們可以聲明我們的priority_queue,它將基於結構中的元素,並將由函數稱爲TheWayILike的函數排序。
priority_queue<SPerson, TheWayILike>
,或者使用的typedef和單名像這樣短的方式:
typedef priority_queue<SPerson, TheyWayILike> newNameForPQ;
但不知何故,這是錯的,我必須添加以下行:矢量
問:
爲什麼我必須將我個人定製的數據類型變成矢量?
爲什麼它必須是一個矢量,爲什麼要用它呢?
爲什麼我需要將我的數據填充到矢量中?我沒有在官方的priority_queue文檔中閱讀過它,所以我很樂意爲菜鳥程序員獲得一些易於理解的解釋。
乾杯!
'Container'只是一個模板參數。它告訴'priority_queue'在內部使用什麼,你不必提供這個容器的一個實例!換句話說,像下面這樣創建你的隊列:'priority_queue,TheWayILike> myPQ'並將你的SPerson元素放入它中:'myPQ.push(a); myPQ.push(b)中; ...' –
2014-10-17 20:10:37