c++ - 为什么 map::find 需要我的参数不是常量?

标签 c++ stl

std::map<Item*, item_quantity_t> _items;

bool Inventory::hasItem(Item const& item) {

    return (_items.find(&item) != _items.end() );

};

此代码无效,但将“hasItem”的输入类型更改为 Item & item 将有效... 有人可以向我解释为什么吗?我已经看到 std::find 需要一个 const 引用,所以向它传递一个 const 对象应该没问题,至少我是这么理解的

最佳答案

您已将 map 的键类型定义为指向非常量项 Item* 的指针。 find 方法需要键类型的(对 a 的常量引用)值,因此它需要指向非常量的指针。

展开模板时,find的参数类型为Item* const&

您可以更改您的hasItem 以采用非const 引用Item&,或者您可以将您的键类型更改为指向const Item 的指针项目常量*

关于c++ - 为什么 map::find 需要我的参数不是常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8841782/

相关文章:

C++ QueryPerformanceCounter 比 sleep 更准确?

c++ - 从命令行命名一个新文件

c++ - 我使用的 std::string 的实现是否实现了引用计数?

c++ - 为什么我得到的 deque 的 max_size() 小于 vector 的 max_size()?

c++ - 左值在使用 std::make_pair 时指定 const 对象

c++ - map vs unordered_map 几个元素

c++ - 什么是实现 is_swappable 以测试 Swappable 概念的正确方法?

c++ - 如何修复 "/lib/tls/libc.so.6: version ` GLIBC_2。 4' not found"?

c++ - 如何在运行时获取多个对象之一的句柄?

c++ - STL 的依赖范围错误