stl equal_range的比较器不是我以为的那样,看过源码,查了别人的资料才了解
我以为equal_range的比较器一定是[](val a, val b){return a == b;}, 实际上,它跟sort的比较器是一样的。是[](val a, val b){return a < b;}(假如升序排列的话)。
看源码,先二分找到一个it, 此it符合如下条件:!_Pre(*it, val) && !Pre(val, *it),翻译成汉语的话就是,*it == val, 就是找到一个在equal_range范围的指针,然后用lower_bound,upper_bound找到两头的指针,返回就可以了。
就是这样的。
本文详细解析了STL中equal_range函数的比较器使用误区,指出其并非简单等于比较,而是遵循排序规则。通过源码分析,揭示了equal_range实际通过lower_bound和upper_bound寻找指定值的边界,为理解和正确使用该函数提供了清晰指导。
634

被折叠的 条评论
为什么被折叠?



