为什么在“使用优先级队列时”之前,我为什么会缺少模板参数
Why am i getting missing template arguments before ‘(’ token while using priority queue?
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
。
相关文章:
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 在C++中传递给函数时,为什么要指定数组大小作为参数
- 为什么 std::function 可以作为 std::not2 的参数?
- 当给定默认值时,为什么此模板参数推导失败
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 为什么默认复制函数在按值发送参数时不调用?
- 为什么 std::绑定错误参数可以成功?
- 模板参数列表中的 false 在模板初始化期间计算为什么?
- 为什么我们不能重复使用具有不同模板参数的别名模板标识符?
- 为什么参数在构造 std::thread 时移动两次
- 为什么参数推断在此模板模板参数中不起作用
- 为什么参数接受"text"而不是字符串变量?
- 为什么参数可以在对象初始化时通过赋值运算符传递给构造函数?
- 在 temp.deduct.partial 中,为什么参数包的专用性较低?
- 为什么参数是 isdigit 整数?
- 为什么参数修饰符(即'const'或"易失性")不被视为函数类型或签名的一部分?
- 为什么参数匹配适用于非模板版本,但不适用于模板版本
- 为什么参数相关查找不适用于函数模板dynamic_pointer_cast
- 为什么参数与printf未定义行为中的转换说明符不匹配
- 为什么参数包扩展如此有限