不幸的是,這隻讀頂點A - F但不是G.基本上在這個循環while(input.find(' ', pos1) != string::npos)
其終止一個字符比我想要它,但我不知道該怎麼改變。我創建了這個代碼只是爲了通過重定向來讀取輸入,併爲圖形創建一個頂點和一個字符向量的映射。這不是很優雅,所以如果你想建議一個更有效的方式來閱讀輸入,那也是很好的。謝謝!讀入除此輸入字符串的最後一個字符之外的所有字符?
void MSTapp::processFile()
{
int pos1;
int pos2;
map<char, Vertex*> adjacencyList;
vector<char> listOrder;
string input;
bool test = false;
while (getline(cin, input)) {
pos1 = pos2 = 0;
if(std::string::npos != input.find_first_of(""))
{
char source = input[0];
char destination = input[2];
stringstream ss(input.substr(4));
int weight;
ss >> weight;
Edge newEdge(destination, weight);
adjacencyList[source]->addEdge(destination, newEdge);
Edge roadBack(source, weight);
adjacencyList[destination]->addEdge(source, roadBack);
}
else
{
while(input.find(' ', pos1) != string::npos)
{
pos2 = input.find(' ', pos1);
char vertex = input[pos1];
listOrder.push_back(vertex);
Vertex* newVertex = new Vertex(vertex);
adjacencyList.insert(make_pair(vertex, newVertex));
pos1 = pos2 + 1;
};
};
};
Graph graph(listOrder, adjacencyList);
prim(graph, adjacencyList[listOrder[0]]);
}
輸入
A B C D E F G
A B 3
A E 4
B C 7
B E 6
B F 5
C D 9
C F 8
D F 9
D G 4
E F 6
F G 8
感謝提供我現有的代碼,有效的解決方案,但我有一種感覺,我想通過解決這個使用字符串流得到更好的實踐。我會試一試,但是如果你有一個stringstream的建議解決方案,那將非常棒,可以幫助我學習! – CodeManiak
第二個想法爲什麼改變已經工作的東西......這是很漂亮的語義代碼,有時這本身很方便 – CodeManiak
真棒修復。它現在正在工作,並且結束了幾天的研究prim算法來創建最小生成樹。沒有什麼比來自編譯代碼的良好感覺:) – CodeManiak