2017-12-27 149 views
1

我用的是優先級隊列實現算法。 這裏是我的代碼爲什麼會出現在使用優先級隊列失蹤前模板參數「(」令牌?

#include <iostream> 
#include<bits/stdc++.h> 
using namespace std; 
int first[2]={2,-2}; 
int second[2]={1,-1}; 
vector<pair<pair<int,int>,int>>vec; 
class compare{ 
    public: 
    bool operator()(pair<pair<int,int>,int>a,pair<pair<int,int>,int>b) 
    { 
     return a.second>b.second; 
    } 
}; 
int main() { 
    long long int a,b,c,d; 
    while(cin>>a>>b>>c>>d) 
    { 
     priority_queue(pair<pair<int,int>,int>,vector<pair<pair<int,int>,int>>,compare) q; 
     map<pair<int,int>,bool>visited; 
     map<pair<int,int>,int>dist; 
     map<pair<int,int>,pair<int,int>> parent; 
     for(int i=1;i<=9;i++) 
     for(int j=1;j<=9;j++) 
     { 
      dist[make_pair(i,j)]=INT_MAX; 
      visited[make_pair(i,j)]=false; 
     } 
     dist[make_pair(a,b)] = 0; 
     visited[make_pair(a,b)] = true; 
     q.push(make_pair(make_pair(a,b),0)); 
     while(!q.empty()) 
     { 
      pair<int,int> node = q.top().first; 
      int distance = q.top().second; 
      q.pop(); 
      //followed by relaxation step 
     } 
    } 
    // your code goes here 
    return 0; 
} 

問題是我收到以下錯誤:

rog.cpp: In function ‘int main()’: 
prog.cpp:39:17: error: missing template arguments before ‘(’ token 
    priority_queue(pair<pair<int,int>,int>,vector<pair<pair<int,int>,int>>,compare) q; 
       ^
prog.cpp:39:41: error: expected primary-expression before ‘,’ token 
    priority_queue(pair<pair<int,int>,int>,vector<pair<pair<int,int>,int>>,compare) q; 
             ^
prog.cpp:39:73: error: expected primary-expression before ‘,’ token 
    priority_queue(pair<pair<int,int>,int>,vector<pair<pair<int,int>,int>>,compare) q; 
                     ^
prog.cpp:39:73: error: expected primary-expression before ‘)’ token 
    priority_queue(pair<pair<int,int>,int>,vector<pair<pair<int,int>,int>>,compare) q; 

我無法理解究竟是什麼error.It沃爾德的意義是很大的幫助,如果有人能澄清這對我

+2

爲了清楚起見,在這裏有一個'typedef'或兩個。 – Bathsheba

+1

您的代碼中不應包含位/ stdC++。h](https://stackoverflow.com/q/31816095/1782465)。 – Angew

+0

請考慮標記已接受的答案。謝謝。 – alhadhrami

回答

2

。你沒有使用正確的語法。而不是寫

priority_queue(pair<pair<int,int>,int>,vector<pair<pair<int,int>,int>>,compare) q; 

的你應該寫

priority_queue<pair<pair<int,int>,int>,vector<pair<pair<int,int>,int>>,compare> q; 

欲瞭解更多信息,請參考以下鏈接:http://en.cppreference.com/w/cpp/container/priority_queue

1

更改此:

priority_queue(pair<pair<int,int>,int>,vector<pair<pair<int,int>,int>>,compare) q; 

這樣:

priority_queue<pair<pair<int,int>,int>,vector<pair<pair<int,int>,int>>,compare> q; 

你會得到這個代碼編譯。

但是,這段代碼是不可讀的。考慮使用typedef