1

次のコードを記述して、多くの入力を受け取り、特定の順序で出力します。

#DEFINE cases 100     

struct job
{
int w;
};

class compjob
{
public:
       bool operator()( job j1,job j2)
       {
       if(j2.w>j1.w)
       return true;

       return false;
       }
};

int main()
{
priority_queue< job, vector<job>, compjob > jobs;

int weight;



for(int i=1;i<=cases;i++)
{
cin>>weight;
job job1;
job1.w=weight;

jobs.push(job1);
} //for loop ends here


for(int i=1;i<=cases;i++)
{
job job1= jobs.pop(); ////////////ERROR!!!!!/////////
cout<<job1.w<<endl;
}

return 0;;
}

しかし、コードをコンパイルすると、上記のマークの行にコンパイルエラーが表示されます。

Invalid conversion from 'void' to non scalar 'job'.

ジョブのpriority_queueを正しく宣言しなかったと思います。また、宣言の2番目の引数の重要性を説明してください(つまり、ベクトル、その使用法はよくわかりません)

4

2 に答える 2

7

popは何も返しません。最初にtopを使用して要素を取得し、次にそれをpopします。

于 2012-12-19T10:55:30.430 に答える
1

ライブラリを使用するたびに、ヘルプページのC ++リファレンス:priority_queueを参照することをお勧めします。

cpluplusにエラーが含まれていると言う人もいるかもしれませんので、代わりにこれを試すことができます。

于 2012-12-19T11:00:22.640 に答える