我有一個文本文件,載體和結構C++
cat molly dog benji bird charlie (etc..)在另一個文本文件
,「一位天貓出去趴在陽光下 - 狗已經在花園裏......」(等)
我應該用它的名字來代替動物。目前我正在閱讀文件並將動物類型放入一個矢量中,並將動物名稱放入另一個矢量中。我的問題是 - 我是否需要將它們放在一個結構中,以便當我循環並找到貓時,我可以找到關聯的名稱 - 或者是否使用其他方法。我聽說過多維矢量,但感覺它可能超過我的腦海,因爲我對編程非常陌生。
我有一個文本文件,載體和結構C++
cat molly dog benji bird charlie (etc..)在另一個文本文件
,「一位天貓出去趴在陽光下 - 狗已經在花園裏......」(等)
我應該用它的名字來代替動物。目前我正在閱讀文件並將動物類型放入一個矢量中,並將動物名稱放入另一個矢量中。我的問題是 - 我是否需要將它們放在一個結構中,以便當我循環並找到貓時,我可以找到關聯的名稱 - 或者是否使用其他方法。我聽說過多維矢量,但感覺它可能超過我的腦海,因爲我對編程非常陌生。
看來最適合你使用的結構是地圖。它可以讓你將一個動物與一個名字聯繫起來,並且可以輕鬆高效地查找動物的名字。
嘗試這種情況:
std::map<std::string, std::string> animal_names;
第一模板類型是鍵類型,第二個是值類型。在你的情況下,鍵是動物,值是名字。
還可以再插入協會與此:
animal_names["cat"] = "molly";
很簡單!請注意,如果你現在迭代地圖,你會按照動物的順序得到它們。那就是"bird"
會先來,然後"cat"
,然後"dog"
。
如果您根本不關心訂單,則可以改爲使用std::unordered_map
。這將改善訪問和插入時間。
既然你說你是一個初學者,我給你的我會怎樣看你的文件的一個示例:
std::ifstream file("animal_names.txt");
std::string animal, name;
std::map<std::string, std::string> animal_names;
while (file >> animal >> name) {
animal_names[animal] = name;
}
以後,如果你想打印出來,例如,貓的名字,只是做:
std::cout << animal_names["cat"] << std::endl;
要地圖類型的動物,以他們的名字,你想用std::map<std::string, std::string>
,這裏的關鍵是動物和VA略將是它的名字,例如:
std::map<std::string, std::string> animalNames;
animalNames["cat"] = "molly";
再後來,當youw病通過std::vector<std::string>
迭代,你只會檢查,如果您正在通過遍歷這個詞確實存在在你的地圖鍵和它的值替換它。
+1在同一時間寫同一個答案: ) – 2013-03-28 11:12:19
哇,謝謝你們,也許這對我來說有點複雜 - 我不太瞭解代碼的第一行或者它的作用,但我會試着去研究它。謝謝 – maccame 2013-03-28 11:33:03
對於數據結構,我建議你看看['std :: unordered_map'](http://en.cppreference.com/w/cpp/container/unordered_map)。 – 2013-03-28 11:08:52
我不是在我的代碼中使用類,我是絕對的初學者,當談到編程時,我發現鏈接中的信息太複雜,無法理解 – maccame 2013-03-28 11:42:09