【发布时间】:2017-03-27 10:20:10
【问题描述】:
我遇到过 set::find 不是查找对象的正确方法的情况,因为我以不同于集合中排序的方式(通过 std::find_if)查找对象。我没有找到任何以这种方式查找元素的复杂性信息。我认为它是线性的,因为遍历“无序”容器以查找匹配项是线性的。
【问题讨论】:
标签: c++ algorithm search set time-complexity
我遇到过 set::find 不是查找对象的正确方法的情况,因为我以不同于集合中排序的方式(通过 std::find_if)查找对象。我没有找到任何以这种方式查找元素的复杂性信息。我认为它是线性的,因为遍历“无序”容器以查找匹配项是线性的。
【问题讨论】:
标签: c++ algorithm search set time-complexity
你可以看看here,发现find_if的复杂度是线性的。
这是因为 find_if 是一种通用算法,它不知道它使用的特定类型的容器。因此它不能使用不同容器的特性来加速搜索过程,而只是检查所有元素以找到合适的元素。
【讨论】:
是的,它的复杂性是线性的。
迭代器参数是一个单向的 InputIterator。唯一可以想到的实现是向前迭代每个元素并检查谓词。由于谓词是任意的,因此不可能针对不同的容器类型专门化算法以提高算法复杂度。
【讨论】: