2017-02-27 5 views
0

suchen Jetzt habe ich eine Karte, die die command_map ist. Und ich habe eine Liste namens address_list. In der command_map ist jedes Paar Adresse und Befehl. In der Adressliste ist jeder Artikel eine Adresse.Ich möchte in der Karte mit dem Element in der Liste

Also was ich tun möchte, ist die Suche nach der Adresse in der address_list in der command_map gespeichert. Und wenn es gefunden wird, drucken Sie diesen Befehl und seine Adresse aus. Andernfalls drucken Sie einfach diesen Befehl aus.

Ich verwendete verschachtelte For-Schleife, um dies zu tun. Aber es funktioniert nicht.

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

Was !? Verwenden Sie [map find] (http://en.cppreference.com/w/cpp/container/map/find). –

+0

Ich habe das versucht, aber ich bin mir nicht sicher, ob ich es richtig gemacht habe. Kannst du mir zeigen, wie man es macht oder irgendwelche Hinweise gibt? – Frank

+1

Bud verwenden Sie einfach Google, um Beispiele für die Verwendung von 'map :: find' zu finden. –

Antwort

1

Suchen Sie die Karte nicht selbst, verwenden Sie die Methode find. Es ist ein rot-schwarzer Baum, also wird es so teuer, wie du es machst. Verwenden Sie 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

Danke Mann. Ich habe es versucht, aber das wird nur den gefundenen Befehl ausdrucken. Es scheint, dass es nie in den anderen Fall kommen wird. – Frank

+0

@Frank, Es wird in den Else gehen, immer wenn die Adresse kein Schlüssel in der my_command-Map ist. –

Verwandte Themen