Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::find和std::map.find都是O(logN)吗?_C++_Stl - Fatal编程技术网

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
    更为相似,而当您对匹配的位置感兴趣时,则需要
    下限
    (检查您是否处于大于所需的关键点)。