首页 > 解决方案 > 为什么 std::map 有一个 find 成员函数?

问题描述

我和一位同事正在讨论成员函数与非成员函数的相对优点。一个问题出现了:为什么std::map有一个find成员函数。

我的回答是,虽然您可以std::find在地图上使用,但您必须搜索键值对,或者使用 find_if 和例如 lambda。然而,这是线性的,并且map.find提供了比线性时间更好的键搜索。我最后断言,如果它可能是非会员,那么它本来就是!(尽管 std::string 表明我的概括可能有些草率)。

我的同事指出,可以使用find与非成员函数相同的方式来实现map.lower_bound.

map.find成为会员有什么理由吗?

标签: c++stlstdmap

解决方案


std::find将搜索键std::map作为非成员函数实现的一大反对意见是,这样做会阻止您实现std::find搜索键值对的当前版本。

作为关联容器,std::map包含键值对。Non-memberstd::find为所有容器定义为在容器中搜索项的函数,该项必须是键值对std::map;用于通过std::find其键查找项目将是不一致的。

显然,可以实现std::find_by_key只适用于地图的功能,但这样的功能总是会根据地图的类型进行专门化。与添加成员函数相比,这在 API 设计中没有任何改进。


推荐阅读