2017-12-27 175 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