yep*_*ons 5 c++ set lower-bound template-specialization
我知道你永远不应该使用std::find(some_map.begin(), some_map.end())或std::lower_bound,因为它需要线性时间而不是由对数提供的对数some_map.lower_bound.类似的事情发生在std::list:有std::list::sort排序功能,但你无法调用std::sort(some_list.begin(), some_list.end()),因为迭代器不是随机访问.
但是,std::swap例如,标准容器有重载,因此调用swap(some_map, other_map)需要O(1),而不是O(n).为什么不C++标准给我们的专门版本,lower_bound以及find地图和套?有深层原因吗?
我认为没有任何深层原因,但它比任何事情都更具哲学性.标准算法的自由函数形式,包括你提到的算法,采用迭代器对来表示它们将遍历的范围.算法无法从这些迭代器中确定底层容器的类型.
提供特化或重载将偏离此模型,因为您必须将容器本身传递给算法.
swap 是不同的,因为它将涉及的类型的实例作为参数,而不仅仅是迭代器.