我正在使用一个集合因为,我想使用已排序容器(如集合)的快速查找属性。我想知道是否必须使用find成员方法来获取已排序容器的好处,还是我还可以在STL算法中使用静态find方法?
我的预感是使用静态版本将使用线性搜索而不是我想要的二进制搜索。
答案 0 :(得分:8)
non-member version执行线性搜索是正确的,而成员版本将进行O(log N)搜索。 std :: set针对O(log N)插入,检索和删除进行了优化。
作为定义点,std :: find方法不是静态函数。请参阅此处,了解the various things static在C ++中的含义。
答案 1 :(得分:2)
这是依赖于实现的,因为某人可能已经对使用集合上的二进制搜索的静态“查找”实现了部分特化,但考虑到所有事情,成员函数版本可能会表现得更好。
IIRC,Scott Meyers在他的“有效STL”一书中建议总是更喜欢查找,交换等常用函数的成员版本而不是非成员函数,因为它们比非成员函数更可能是最佳实现-member版本和通常可以依赖于成员版本的性能优势,而您不能总是依赖于给定函数的部分特化将存在的事实。