c++ - 为什么 std::map 有一个 find 成员函数?
问题描述
我和一位同事正在讨论成员函数与非成员函数的相对优点。一个问题出现了:为什么std::map
有一个find
成员函数。
我的回答是,虽然您可以std::find
在地图上使用,但您必须搜索键值对,或者使用 find_if 和例如 lambda。然而,这是线性的,并且map.find
提供了比线性时间更好的键搜索。我最后断言,如果它可能是非会员,那么它本来就是!(尽管 std::string 表明我的概括可能有些草率)。
我的同事指出,可以使用find
与非成员函数相同的方式来实现map.lower_bound
.
map.find
成为会员有什么理由吗?
解决方案
std::find
将搜索键std::map
作为非成员函数实现的一大反对意见是,这样做会阻止您实现std::find
搜索键值对的当前版本。
作为关联容器,std::map
包含键值对。Non-memberstd::find
为所有容器定义为在容器中搜索项的函数,该项必须是键值对std::map
;用于通过std::find
其键查找项目将是不一致的。
显然,可以实现std::find_by_key
只适用于地图的功能,但这样的功能总是会根据地图的类型进行专门化。与添加成员函数相比,这在 API 设计中没有任何改进。
推荐阅读
- sql - 如何避免这种语法:(Format(R.Date_VL,'') = Format(M.Date,'') => 使宏非常慢
- python - 修复 plotnine / ggplot 中绘图区域与 x 轴标签之间的距离
- java - 避免在数组java中计算相同的元素
- sql-server-2008-r2 - Where子句中同一列的多个条件
- spring-boot - SpringBoot2数据JPA抛出ConstraintViolationException
- c# - 使 System.Reactive 在新订阅时重复最后 X 项
- vue.js - 如何在 vue 中从 axios 打印数组?
- javascript - 查找类中具有属性的所有元素
- php - Laravel 8 - 如何重定向错误 404?
- typescript - 打字稿:断言未知输入的类型为 Pick
对于指定的键