2015-04-22 42 views
0

所以這是我的代碼段:如何做一個std ::地圖查找

std::map<int, std:string> tagMap = {{1, "data"},{2,"entry"},{3,"id"}} 

.... 

/* ORIGINAL 
for (auto& node: doca.child("data").children("entry")) { 
    const char* id = node.child_value("id"); 
    mapa[id] = node; 
} 
*/ 


for (auto& node: doca.child(tagMap.find(1)).children(tagMap.find(2))) { 
    const char* id = node.child_value(tagMap.find(3)); 
    mapa[id] = node; 
} 

我試圖用一個從地圖查找替換一個固定的定義。我不確定如何實現這一點,我的方法似乎沒有工作。我想知道是否有人可以告訴我正確的做法嗎?

+1

嘿吉米,你能夠添加一些更多的上下文,也許更多的示例代碼來解決這個問題嗎?用上面的代碼來理解你想要做什麼並不容易(並且它可能就像改變變量名以便正確對齊+少量更多上下文一樣簡單) – SJoshi

+0

'std :: map :: find'返回一個迭代器。我猜這不是你想要的。 – SiggiSv

+0

@SJoshi其餘的代碼有點破碎,所以可能會讓事情混淆。我目前有評論的代碼,但它具有硬編碼映射到標籤名稱。它下面的代碼是我想要做的,相同的代碼,但用地圖查找來獲得值。 – Jimmy

回答

1

這裏是你想要什麼,作爲一個可能的建議,這裏是一個地圖查找:

std::map<int, std::string> tagMap = {{1, "data"},{2,"entry"},{3,"id"}}; 
std::cout << tagMap[1] << std::endl; // returns 'data' 
std::cout << tagMap[2] << std::endl; // returns 'entry' 
std::cout << tagMap[3] << std::endl; // returns 'id' 

而且不支持的代碼,我看不出有什麼DOCA是,所以這大概就我所能接受吧。

for (auto& node: doca.child(tagMap[1]).children(tagMap[2])) { 
    const char* id = node.child_value(tagMap[3]); 
    mapa[id] = node; 
} 
+0

謝謝,但我該如何將值放入我的代碼中。 ps對不起,我剛剛編輯我的代碼,映射是爲了叫做tagMap – Jimmy

+0

所以這個工作:doca.child(tagMap。[1] .children – Jimmy

+0

@Jimmy Not。[1]只是tagMap [1]會返回字符串嵌入在地圖中。 – SJoshi

相關問題