我已經定義了一個minheap如下最小堆和最大堆之間切換基於標記
typedef priority_queue<megePartitions_t,vector<megePartitions_t>,compareMergePartition> mergePartitionFilesQ_t;
該比較器被定義如下
struct compareMergePartition
{
bool operator()(const megePartitions_t &lhs,const megePartitions_t &rhs)
{
return *(lhs._pair) > *(rhs._pair);
}
};
我使用的定義minheap如下
mergePartitionFilesQ_t mergeQ
現在,我想根據標誌在minheap和maxheap之間切換,我應該改變比較器的構造使用者可以拿起旗幟並用它在比較之間或之間翻轉,或者有更好的方法。感謝您的幫助。
答:我覺得沒有必要使用函子,所以我切換到函數指針,並根據標誌選擇適當的函數。
if(m_builtAcending)
comparator = compareMergePartitionAsc;
else
comparator = compareMergePartitionDes;
mergePartitionFilesQ_t mergeQ(comparator);
謝謝freitass的幫助
@john你的意思是,兩個不同的函數,如何typedef優先級隊列? – vgeta 2013-05-06 14:27:22
你能再詳細一點嗎?你想採取一個現有的堆,切換標誌,然後重新運行'make_heap'從最小值改變到最大值或相反? – 2013-05-06 14:29:49
@MarkB不,我不想重建基於標誌的現有堆,這是我想要聲明堆對象時,「mergePartitionFilesQ_t mergeQ」mergeQ可以是基於標誌的minHeap或maxHeap。 – vgeta 2013-05-06 14:34:16