c ++中集合中查找方法的时间复杂度是多少?

11 c++ stl set find

set<int> s;

s.insert(1);
s.insert(2);
...
s.insert(n);
Run Code Online (Sandbox Code Playgroud)

我想知道从1..n开始的数字s.find(k)在哪里需要多长时间k?我假设它是log(n).这是对的吗?

Dav*_*eas 17

O(log N)搜索单个元素.

§23.1.2表69

expression  return            note                                   complexity
a.find(k)   iterator;         returns an iterator pointing to an     logarithmic
            const_iterator    element with the key equivalent to k, 
            for constant a    or a.end() if such an element is not 
                              found
Run Code Online (Sandbox Code Playgroud)

  • 很好的信息,但§23.1.2如果没有书的名称,表69并不是很好. (3认同)
  • @snibbets:在处理标准化语言时,这本书就是标准。答案是 C++03 标准。在当前的 C++11 标准中,这将是 §23.2.4 表 102。 (2认同)

Jav*_*eak 5

的复杂性std::set::find()O(log(n))仅仅意味着将有数量级的log(n)存储在所述对象的比较set

如果集合中 2 个元素的比较复杂度为O(k),则实际复杂度为O(log(n)?k)
这可能发生在例如一组字符串(k 是最长字符串的长度)的情况下,因为 2 个字符串的比较可能意味着比较它们的大部分(或全部)字符(如果它们以相同的前缀开头或平等的)

文件说是相同的:

复杂

大小为对数。