什么是std :: set :: equal_range?

rub*_*ict 8 c++ stl

由于std::set不能包含重复元素且始终排序,因此std::set::equal_range将始终返回包含none或1元素的范围.从技术上讲,是的,这仍然是一个范围,但这个算法的目的是什么?因为std::set它似乎没必要.

Lig*_*ica 9

我只是在猜测.但是,就像count(),当你在一个模板中并且不想确定你是在一个std::set或一些其他关联容器上运行时,它有一些价值.

基本上,它是为了一致性.该功能确实像宣传的一样执行,只是因为它具有可疑的使用不是像find()你单独使用的那样.如果您确实想要开箱即用的半开放范围,它确实可以为您节省一个手动迭代器增量.:P


Fer*_*cio 8

所有关联容器支持的equal_range,这意味着你可以写一个接受通用代码set,multiset,map或者multimap,它会做正确的事情.