以指针作为键的 std::map

主要观点:当std::map的键为指针时,find()除非搜索查询是映射中的实际指针,否则会失败。通常这不是我们想要的。以坐标映射行星为例,std::map中键是指向Coords对象的指针,find()比较的是指针而非实际坐标。
关键信息:

  • 定义了CoordsPlanet类,包含坐标和行星相关信息及输出操作符重载。
  • 展示了创建std::map并添加坐标和行星对,以及通过find()查找的情况,包括成功和失败的示例。
  • 提出问题及解决方案,需添加自定义坐标比较逻辑(重载operator<)和使用自定义比较器(函数对象或 lambda 表达式)来让find()比较实际坐标而非指针。
    重要细节:
  • Coords类的operator<函数通过比较xy来定义坐标的小于关系。
  • 函数对象CmpCoordsFunctor通过重载operator()来比较两个Coords指针。
  • lambda 表达式CmpCoordsLambda以类似方式比较两个Coords指针。
    最终结果:无论使用哪种方法添加自定义比较器,都能使find()通过检查坐标值而非指针来正确搜索坐标是否在映射中。
阅读 7
0 条评论