我有两个不同的相同功能的实现
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?
find_if对它所搜索的序列是否是容器一无所知,更不用说该容器是否恰好提供了执行相同任务的优化方法.它将迭代它给定的序列,应用它给定的谓词,对于大容器,它将比容器自己的find函数提供的基于散列的查找慢得多.
| 归档时间: |
|
| 查看次数: |
164 次 |
| 最近记录: |