C++ std::find和std::map.find都是O(logN)吗?
是C++ std::find和std::map.find都是O(logN)吗?,c++,stl,C++,Stl,是std::find和std::map.find都是O(logN)? 如果是,那么std::find如何在对数时间内对std::map执行搜索 std::find的实现是否专门用于std::map用例?否,std::find是O(N),而与容器无关。它不知道“容器”,对于std::map没有专门化std::find只使用迭代器,迭代器没有关于底层容器的信息。根据,实施相当于: template<class InputIt, class T> InputIt find(InputIt
std::find
和std::map.find
都是O(logN)?
如果是,那么std::find
如何在对数时间内对std::map
执行搜索
std::find
的实现是否专门用于std::map
用例?否,std::find
是O(N),而与容器无关。它不知道“容器”,对于std::map
没有专门化std::find
只使用迭代器,迭代器没有关于底层容器的信息。根据,实施相当于:
template<class InputIt, class T>
InputIt find(InputIt first, InputIt last, const T& value)
{
for (; first != last; ++first) {
if (*first == value) {
return first;
}
}
return last;
}
模板
输入查找(先输入,后输入,常量和值)
{
for(;first!=last;++first){
如果(*第一个==值){
先返回;
}
}
最后返回;
}
根据C++标准(强调矿山):
25.2.5查找[alg.Find]template<class InputIterator, class T>
InputIterator find(InputIterator first, InputIterator last,
const T& value);
...
模板
InputIterator查找(InputIterator first,InputIterator last,
常数(T和值);
...
[first,last)
范围内的第一个迭代器i
,对于该迭代器,以下相应条件适用:*i==value
,..如果未找到此类迭代器,则返回last
模糊相关:与
std::map::find
最接近的非map
特定事物可以说是,它在预先排序的随机访问容器中寻找值(例如向量
、数组、deque
)@TonyD我想你的意思是std::lower_bound
binary_search
不会返回迭代器。@MarkRansom:嗯,当调用mymap.find(x)
进行!=mymap.end()
成员资格测试时(这是一个更简单但非常常见的用法,尽管可以用mymap.count()
替代),binary\u search
更为相似,而当您对匹配的位置感兴趣时,则需要下限
(检查您是否处于大于所需的关键点)。