为什么在“使用优先级队列时”之前,我为什么会缺少模板参数

Why am i getting missing template arguments before ‘(’ token while using priority queue?

本文关键字:为什么 参数 优先级 队列 之前      更新时间:2023-10-16

i使用优先队列实现算法。这是我的代码

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

我无法理解错误的含义。

您没有使用适当的语法。而不是写作

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

更改以下内容:

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