O(N)查找但在排序列表上使用upper_bound时进行O(log(N))比较

时间:2012-07-30 20:17:27

标签: c++ list

list<Person> lp;
...
lp.sort(PersonNameLess());

Person newPerson;
...
lp.insert(upper_bound(lp.begin(), lp.end(), 
          newPerson, PersonNameLess()), newPerson);

在有效的c ++第3版,第198页,第45项中,它说如下:

  

查找需要线性时间,但它只执行对数   比较数

问题:为什么它只执行对数的比较?

1 个答案:

答案 0 :(得分:4)

  

为什么它只执行对数的比较?

因为列表已排序且upper_bound执行binary search