代码之家  ›  专栏  ›  技术社区  ›  Rohan Akut

为什么在使用优先级队列时,在–of˜(of™)标记之前缺少模板参数?

  •  1
  • Rohan Akut  · 技术社区  · 8 年前

    我正在使用优先级队列实现一个算法。 这是我的密码

    #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;
    

    我无法理解错误的确切含义。如果有人能帮我澄清一下,那会很有帮助的。

    2 回复  |  直到 8 年前
        1
  •  2
  •   Abdulrahman Alhadhrami    8 年前

    您使用的语法不正确。而不是写作

    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

        2
  •  1
  •   gsamaras a Data Head    8 年前

    更改此项:

    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 .