我正在尝试使用映射,priory队列和列表来编写小规模的Dijktra算法。我知道这个代码有很多问题,但目前我主要担心重载+运算符以添加到对象。我不熟悉超载,任何帮助将不胜感激。我正在尝试两个基于私有成员成本(这是一个整数)添加两个对象(节点)。运算符+超载C++
这里是我的代码:
#include<iostream>
#include <map>
#include <queue>
#include <list>
using namespace std;
class node
{
public:
node();
node(char n, int l){
name = n; cost =l;}
void display()const{cout<<"name = "<<name<<" cost = "<<cost<<"\n";}
char getName()const{return name;}
int getCost() {return cost;}
node operator+(const node& n){node N1;N1.cost = this->cost + N1.cost; return N1;} //<---
private:
char name;
int cost;
};
bool operator<(node a, node b)
{
return a.getCost()> b.getCost();
}
int main()
{
map<node,node>::iterator mapItr;
map<node,node> myMap;
priority_queue<node> que;
list<node> solution;
list<node>::iterator listItr;
list<node> checkList;
node * nptr;
myMap.insert(pair<node, node>(node('A',5),node('B',5)));
myMap.insert(pair<node, node>(node('A',6),node('C',6)));
myMap.insert(pair<node, node>(node('B',3),node('C',3)));
myMap.insert(pair<node, node>(node('B',7),node('E',7)));
myMap.insert(pair<node, node>(node('C',2),node('E',2)));
myMap.insert(pair<node, node>(node('C',4),node('D',4)));
myMap.insert(pair<node, node>(node('D',5),node('E',5)));
myMap.insert(pair<node, node>(node('D',10),node('G',10)));
myMap.insert(pair<node, node>(node('E',9),node('G',9)));
myMap.insert(pair<node, node>(node('E',4),node('F',4)));
myMap.insert(pair<node, node>(node('F',2),node('G',2)));
solution.push_back(node('A',0));
do
{
listItr=solution.begin();
do
{ nptr = &*listItr;
for(mapItr=myMap.begin();mapItr!=myMap.end();mapItr++)
{
if(nptr->getName()==mapItr->first.getName())
{
que.push(mapItr->second);
}
}
if(nptr->getName()!= que.top().getName())
{
que.top()= (*que.top())+(*nptr);//<---- error here
solution.push_back(que.top());
que.pop();
listItr++;
solution.pop_front();
}
else
{que.pop();
listItr++;}
}
while(listItr!= solution.end());
}
while (!que.empty());
return 0;
}
的错误信息是:
敌不过在“* que.std :: priorty_queue < _TP,_Sequence,_Compare 'opeerator *'> ::顶>()”在操作者+代码
'que.top()'返回一个引用,而不是指针。问题在于试图解引用它。 – Kevin
已编辑...取出了一些不必要的代码。我想我真正知道的是如何将P队列中第一个元素的成本与解决方案的成本相加? – bryan