0

次のように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);

freitasさん、ご協力ありがとうございます

4

2 に答える 2