C++ 在泛型优先级队列类型中匹配函数参数

C++ 在泛型优先级队列类型中匹配函数参数,c++,C++,我使用一个外部库,它提供了一个通用的优先级队列类型实现。 优先级队列的类(在头文件中声明,称为priorityQueue.h)为 我需要此优先级队列将以下结构的项存储到: struct certificate { float tfail; typename GraphType::NodeIterator n; unsigned int ne, citem; }; 所以我实现了这个功能: //Insert a key-value pair to the prior

我使用一个外部库,它提供了一个通用的优先级队列类型实现。 优先级队列的类(在头文件中声明,称为priorityQueue.h)为

我需要此优先级队列将以下结构的项存储到:

 struct certificate
 {
    float tfail;
    typename GraphType::NodeIterator n;
    unsigned int ne, citem; 
 };
所以我实现了这个功能:

//Insert a key-value pair to the priority queue
void insert( const KeyType& key, const DataType& data, const DescriptorType ptr = 0)
void storeCertificates(const NodeIterator& u, int node_or_edge)
{
//representation: (ne, idn, tfail), for a node identified by idn if we have a min cert (ne= 0), or a tail of an edge identified by idn if we have a pr cert (ne=1)
certificate cert;

int ne;
if(node_or_edge == 0) //min certificate
    ne = 0;
else              //prim certificate
    ne = 1;

cert.ne = ne;
cert.n = u;
cert.tfail = u->tfail;
cert.citem = 0;

c.insert( cert.tfail, cert, cert.citem); //<=========
}
作废存储证书(常量节点运算符&u、int节点\u或\u边缘)
{
//表示:(ne、idn、tfail),如果我们有一个最小证书(ne=0),则表示由idn标识的节点;如果我们有一个pr证书(ne=1),则表示由idn标识的边的尾部
证书;
int ne;
if(node_或_edge==0)//最小证书
ne=0;
else//prim证书
ne=1;
cert.ne=ne;
证书编号=u;
cert.tfail=u->tfail;
cert.citem=0;
c、 插入(cert.tfail,cert,cert.citem);//优先级队列类型;
c型优先;
在编译时,我得到以下错误:

td_dijkstra_and_os.h:680:2: error: function does not match call to  
‘PriorityQueue<float, std::_List_iterator<ALNode<node, edge> >, HeapStorage>::insert(float&, TD_Dijkstra_OS<DynamicGraph<AdjacencyListImpl, node, edge> >::certificate&, unsigned int&)’
td_dijkstra_and_os.h:680:2: note: candidate is:
/home/danuser/eCOMPASS/pgl/include/Structs/Trees/priorityQueue.h:132:10: σημείωση: void PriorityQueue<KeyType, DataType, StorageType>::insert(const KeyType&, const DataType&, PriorityQueue<KeyType, DataType, StorageType>::DescriptorType) [with KeyType = float, DataType = std::_List_iterator<ALNode<node, edge> >, StorageType = HeapStorage, PriorityQueue<KeyType, DataType, StorageType>::DescriptorType = unsigned int*, PQSizeType = unsigned int]
/home/danuser/eCOMPASS/pgl/include/Structs/Trees/priorityQueue.h:132:10: σημείωση:   no known conversion for argument 2 from ‘TD_Dijkstra_OS<DynamicGraph<AdjacencyListImpl, node, edge> >::certificate’ to ‘const std::_List_iterator<ALNode<node, edge> >&’
td_dijkstra_和_os.h:680:2:错误:函数与调用
'PriorityQueue::insert(float&,TD_Dijkstra_OS::certificate&,unsigned int&)'
td_dijkstra_和_os.h:680:2:注:候选人是:
/home/danuser/eCOMPASS/pgl/include/Structs/Trees/priorityQueue.h:132:10:σημεεωση:void priorityQueue::insert(const-KeyType&,const-DataType&,priorityQueue::DescriptorType)[其中KeyType=float,DataType=std:_-List\u迭代器,StorageType=HeapStorage,priorityQueue::DescriptorType=unsigned int*,priorityQueue=unsigned int]
/home/danuser/eCOMPASS/pgl/include/Structs/Trees/priorityQueue.h:132:10:σημεωση:参数2从“TD_Dijkstra_OS::certificate”到“const std:”的转换未知
请为我的实现提供使用此插入函数的正确方法


编辑:有人能通过使用std::priority\u queue或者更好的boost的priority queue来实现这一点吗?

队列的数据类型是
NodeIterator
,但您正在尝试插入
证书

队列的数据类型是
NodeIterator
,但您正在尝试插入t
证书

您正在为其创建实例

     PeiorityQueueType c; 
类型

      PriorityQueue< WeightType, NodeIterator, HeapStorage>
但您正在调用insert函数作为

       c.insert( cert.tfail, cert, cert.citem);
哪一个是

     template<const float&, const certificate&, unsigned int >.
模板。

这会对您声明的数据类型产生争议。因此,请更改函数的调用插入函数数据类型。

您正在为其创建实例

     PeiorityQueueType c; 
类型

      PriorityQueue< WeightType, NodeIterator, HeapStorage>
但您正在调用insert函数作为

       c.insert( cert.tfail, cert, cert.citem);
哪一个是

     template<const float&, const certificate&, unsigned int >.
模板。

这会对您声明的数据类型产生争议。因此,请将调用的insert functions数据类型更改为function。

您有一个
PriorityQueue
,它的
datatype
NodeInterator
,而不是
certificate
。您有一个
PriorityQueue
数据类型是
NodeInterator
,而不是de>证书
.W