2016-07-14 4 views
0

に引数を比較してください。次のようなものがあります。は、私がここに<code>int</code>が<code>priority_queue</code>の外で定義されたベクトル<code>arr</code>のインデックスを格納<code>priority_queue<int, vector<int>, TCOMP></code>などのカスタム<code>priority_queue</code>を定義したいPRIORITY_QUEUE

vector<int> arr = {2, 5, 1, 6, 10, 3}; 
struct TCOMP 
{ 
    bool operator()(int index1, int index2) const 
    { return arr[index1] < arr[index2]; } 
} 
priority_queue<int, vector<int>, TCOMP> pq; 

これを行う方法はありますか?この問題にはint*を関与させたくありません。

+1

"これを行う方法はありますか?" - 構文エラーはさておき、あなたはそれをやっていませんか? – WhozCraig

+0

特定の問題に遭遇している場合は、[mcve]を投稿してください。それ以外の場合は質問を明確にしてください。 – juanchopanza

+0

もちろん、私はそれをテストし、構文エラーがあることを知っています。私が望むのは、どのようにしてpriority_queueにベクトルのインデックスのみを含めることができ、インデックスがヒープソートされるかです。 –

答えて

0

比較述語を明示的に配列にバインドします。これにより、さまざまな配列で使用できるようになり、柔軟性が向上します。

#include <vector> 
#include <queue> 
using namespace std; 

struct TCOMP 
{ 
    const vector<int>& arr; 
    TCOMP(const vector<int>* a) : arr(*a) {} 

    bool operator()(int index1, int index2) const 
    { return arr[index1] < arr[index2]; } 
}; 


int main() 
{ 
    vector<int> arr = {2, 5, 1, 6, 10, 3}; 
    priority_queue<int, vector<int>, TCOMP> pq((TCOMP(&arr))); 

    return 0; 
} 
関連する問題

 関連する問題