在c ++中搜索unordered_map的时间

use*_*699 0 c++ stl

我有两个不同的相同功能的实现

IPAddress UMNS::lookup(const HostName& name) const{
    auto it=ns.find(name);
    if(it!=ns.end()){
        return (*it).second;
    }
    return NON_EXISTING_ADDRESS;

}
Run Code Online (Sandbox Code Playgroud)

IPAddress UMNS::lookup(const HostName& name) const{

    auto it=find_if(ns.begin(),ns.end(),
        [&name] ( const pair<HostName,IPAddress> &a){ return a.first==name;});
    bool found = it != ns.end();
    if ( found ){
        return (*it).second;
    }
    return NON_EXISTING_ADDRESS;

}
Run Code Online (Sandbox Code Playgroud)

ns是一个unordered_map但两个函数的执行时间不一样.

第一个实现给出了这样的:
搜索次数:1000000
平均搜索时间(ms):0.000373

第二个实现给出了这个:
搜索次数:1000000
平均搜索时间(ms):24.9

第二次实施有什么问题?
为什么我不能使用find_if?

Mik*_*our 6

find_if对它所搜索的序列是否是容器一无所知,更不用说该容器是否恰好提供了执行相同任务的优化方法.它将迭代它给定的序列,应用它给定的谓词,对于大容器,它将比容器自己的find函数提供的基于散列的查找慢得多.