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找到两头的指针,返回就可以了。
就是这样的。