2013-03-28 63 views
1

我有一個文本文件,載體和結構C++

 
cat molly 
dog benji 
bird charlie (etc..) 
在另一個文本文件

,「一位天貓出去趴在陽光下 - 狗已經在花園裏......」(等)

我應該用它的名字來代替動物。目前我正在閱讀文件並將動物類型放入一個矢量中,並將動物名稱放入另一個矢量中。我的問題是 - 我是否需要將它們放在一個結構中,以便當我循環並找到貓時,我可以找到關聯的名稱 - 或者是否使用其他方法。我聽說過多維矢量,但感覺它可能超過我的腦海,因爲我對編程非常陌生。

+0

對於數據結構,我建議你看看['std :: unordered_map'](http://en.cppreference.com/w/cpp/container/unordered_map)。 – 2013-03-28 11:08:52

+0

我不是在我的代碼中使用類,我是絕對的初學者,當談到編程時,我發現鏈接中的信息太複雜,無法理解 – maccame 2013-03-28 11:42:09

回答

3

看來最適合你使用的結構是地圖。它可以讓你將一個動物與一個名字聯繫起來,並且可以輕鬆高效地查找動物的名字。

嘗試這種情況:

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; 
+0

+ +1爲了同時寫入相同的答案:) – LihO 2013-03-28 11:11:46

+0

它說animal_names,而不是[「貓」]我會需要矢量名稱不是嗎? – maccame 2013-03-28 13:07:51

+0

@Shiver沒有載體了。我們用這張地圖替換你的兩個向量。 – 2013-03-28 13:10:53

2

地圖類型的動物,以他們的名字,你想用std::map<std::string, std::string>,這裏的關鍵是動物和VA略將是它的名字,例如:

std::map<std::string, std::string> animalNames; 
animalNames["cat"] = "molly"; 

再後來,當youw病通過std::vector<std::string>迭代,你只會檢查,如果您正在通過遍歷這個詞確實存在在你的地圖鍵和它的值替換它。

+1

+1在同一時間寫同一個答案: ) – 2013-03-28 11:12:19

+0

哇,謝謝你們,也許這對我來說有點複雜 - 我不太瞭解代碼的第一行或者它的作用,但我會試着去研究它。謝謝 – maccame 2013-03-28 11:33:03