我想使用列表中的项目在地图中搜索

时间:2017-02-27 18:57:41

标签: c++

现在我有一张地图,即command_map。我有一个名为address_list的列表。在command_map中,每对都是地址和命令。在address_list中,每个项目都是地址。

所以我想要做的是搜索存储在command_map中address_list中的地址。当找到它时,打印出该命令及其地址。否则,只需打印出该命令即可。

我使用嵌套for循环来执行此操作。但它不起作用。

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;
        }
    }
}

1 个答案:

答案 0 :(得分: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;
    }
}