2017-02-27 79 views
0

現在我有一個映射,它是command_map。我有一個名爲address_list的列表。在command_map中,每一對都是地址和命令。在address_list中,每個項目都是地址。我想使用列表中的項目在地圖中搜索

所以我想要做的就是搜索存儲在command_map中address_list中的地址。當它被發現時,打印出該命令及其地址。否則,只需打印出該命令即可。

我正在使用嵌套循環來做到這一點。但它不起作用。

for (list<string>::iterator it_address= address_list.begin(); it_address != address_list.end(); ++it_address) 
{ 
    for (map<string,string>::iterator it=command_map.begin(); it!=command_map.end(); ++it) 
    { 
     if (*it_address == it->first) 
     { 
      cout<<"Addr_"<<it->first<<":"<<endl; 
      cout<<"   "<<it->second<<endl; 
     } 
     else 
     { 
      cout<<"   "<<it->second<<endl; 
     } 
    } 
} 
+2

什麼!?使用[地圖查找](http://en.cppreference.com/w/cpp/container/map/find)。 –

+0

我試過,但我不確定是否正確。你能告訴我該怎麼做或提供任何提示嗎? – Frank

+1

Bud只是使用Google來查找如何使用'map :: find'的示例。 –

回答

1

不要自己搜索地圖,請使用find方法。這是一棵紅黑樹,所以按照自己的方式進行搜索將會很昂貴。使用std::map::find

for (list<string>::iterator it_address= address_list.begin(); it_address != address_list.end(); ++it_address) { 

    auto myCommand = command_map.find(*it_address); 

    if (myCommand != command_map.end()) { 
     cout<<"Addr_"<<myCommand->first<<":"<<endl; 
     cout<<"   "<<myCommand->second<<endl; 
    } else { 
     cout<<"   "<< *it_address <<endl; 
    } 
} 
+0

謝謝你。我試過你的方式,但這隻會打印出找到的命令。看來它永遠不會進入其他情況。 – Frank

+0

@Frank,它會進入else,任何時候地址不是my_command映射中的鍵。 –