我正在嘗試使用映射,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