主要观点:当std::map
的键为指针时,find()
除非搜索查询是映射中的实际指针,否则会失败。通常这不是我们想要的。以坐标映射行星为例,std::map
中键是指向Coords
对象的指针,find()
比较的是指针而非实际坐标。
关键信息:
- 定义了
Coords
和Planet
类,包含坐标和行星相关信息及输出操作符重载。 - 展示了创建
std::map
并添加坐标和行星对,以及通过find()
查找的情况,包括成功和失败的示例。 - 提出问题及解决方案,需添加自定义坐标比较逻辑(重载
operator<
)和使用自定义比较器(函数对象或 lambda 表达式)来让find()
比较实际坐标而非指针。
重要细节: Coords
类的operator<
函数通过比较x
和y
来定义坐标的小于关系。- 函数对象
CmpCoordsFunctor
通过重载operator()
来比较两个Coords
指针。 - lambda 表达式
CmpCoordsLambda
以类似方式比较两个Coords
指针。
最终结果:无论使用哪种方法添加自定义比较器,都能使find()
通过检查坐标值而非指针来正确搜索坐标是否在映射中。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。