作者:拍友2502916683 | 来源:互联网 | 2023-09-04 11:13
如题,自定义了一个结构体,希望以结构体中某个变量的权重为标准进行最小堆排序,不知道该怎么写。每个结构体都被放在了vector中,不知道为何在我这上编译错误,是参数错了还是什么别的错了?结构体如下,
如题,自定义了一个结构体,希望以结构体中某个变量的权重为标准进行最小堆排序,不知道该怎么写。每个结构体都被放在了vector中,不知道为何在我这上编译错误,是参数错了还是什么别的错了?
结构体如下,v1,v2,weight全是int类型
typedef struct EdgeNode* pEdgeNode;
struct EdgeNode{
DataType v1,v2;
WeightType weight;
};
//每个结构体被这样存储在vector中
vector edge_v;
vector::iterator p;
for(...p++)
(*p).v1 = v;
(*p).v2 = w->adj_vertex;
(*p).weight = w->weight;
//自定义的函数
bool EdgeCompare(vector::iterator a,vector::iterator b)
{
return (*a).weight < (*b).weight ? true : false;
}
//调用make_heap
make_heap(edge_v.begin(),edge_v.end(),EdgeCompare);
错误:就在make_heap说无法将普通的迭代器p转换为edgenode的迭代器a,不懂,我明明声明的都是一样的迭代器。
请大神指教,或者写一份标准的自定义结构体compare函数作个范例。
2 个解决方案
找到错误了,但不知道如何解决。
编译器给出的意思是make_heap接受的迭代器类型是normal,而我给的迭代器类型是::itreator p,所以肯定不对啦。但是不知道怎么解决,如果说make_heap是按模板写的话,那迭代器应该也是模板的,如果make_heap只是针对C++标准类型int、short。。balabala而写的话,那我只能无奈了。。这是逼我更换其它语言吗?