多路优先级队列实现
multiway priority queue implementation
这里是我的多路优先级队列实现的代码
#include<iostream>
#include<vector>
using namespace std;
template<class T>
class pq
{
int d,n;
vector<int>pq;
vector<int>qp;
const vector<T>&a;
void exch(int i,int j)
{
int t=pq[i];
pq[i]=pq[j];
pq[j]=t;
qp[pq[i]]=i;
qp[pq[j]]=j;
}
void fixup(int k)
{
while(k>1 && a[pq[(k+d-2)/d]]>q[pq[k]])
{
exch(k,(k+d-2)/d);
k=(k+d-2)/d;
}
}
void fixdown(int k,int n)
{
int j;
while((j=d*(k-1)+2)<=n)
{
for(int i=j+1;i<j+d&& i<=n;i++)
if(a[pq[j]]>a[pq[i]])
j=i;
if(!(a[pq[k]]>a[pq[j]]))
break;
exch(k,j);
k=j;
}
}
public:
pq(int n,const vector<T>&a,int d=3):a(a),pq(n+1,0),qp(n+1,0),n(0),d(d){}
int empty() const
{
return n==0;
}
void insert(int v)
{
pq[++n]=v ;
qp[v]=n;
fixup(n);
}
int getmin()
{
exch(1,n);
fixdown(1,n-1);
return pq[--n];
}
void lower(int k)
{
fixup(qp[k]);
}
};
int main()
{
return 0;
}
但它有一些错误,即我制作了一些错误的构造函数,这是我在运行代码时看到的两个错误
1>c:users\documentsvisual studio 2012projectsmultiway_heapmultiway_heapmultiway_heap.cpp(8): error C2461: 'pq<T>' : constructor syntax missing formal parameters
1> c:users\documentsvisual studio 2012projectsmultiway_heapmultiway_heapmultiway_heap.cpp(68) : see reference to class template instantiation 'pq<T>' being compiled
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped =========
所以请帮助我了解错误在哪里
试着理解编译器在告诉你什么——这并不难。
class pq
{
/* ... */
vector<int> pq; // I suppose this is line 8 according to compiler error
您正在为类模板及其成员使用相同的名称。这在c++中是不合法的。
相关文章:
- 在c++队列中使用pop和visit实现线程安全
- C++数组队列实现方法错误
- 实现优先级队列
- 使用 std::forward_list 返回错误的队列实现
- 了解使用堆栈实现队列的递归调用机制
- ARM 上的无锁 SPSC 队列实现
- 如何实现唯一 id 队列,其中元素可以在 C++ 中"bumped"到顶部?
- 堆栈和队列的C++默认实现
- 实现循环阵列队列
- 为什么优先级队列是使用堆实现的,而我们可以更有效地使用向量来实现它
- 无锁队列实现中的虚假下溢C++
- 使用链表实现队列
- 无法在C++中实现队列<pair<int、int*> >
- 使用 BST 实现队列
- 根据堆栈类实现队列类的复制构造函数
- 从头开始实现队列结构 (C++)
- 用两个堆栈实现队列——脱队列测试问题
- 用链表实现队列
- 实现队列类,分段错误
- 使用 MFC 实现队列的正确方法