如何 return std::map 项目

How to return a std::map item

我在从位于 class 中的 std::map 退回物品时遇到问题。 我正在尝试创建一个像

这样的简单函数
ExplorerObjectMapItem* MyClass::getFirst()
{
    mInternalMapIterator = mObserverLookup.begin();
    ExplorerObjectMapItem* item = &*mInternalMapIterator;
    return item;
}

使用以下类型定义的地方

typedef map< Subject*, shared_ptr<ExplorerObject> > ExplorerObjectMap;
typedef pair<Subject*, shared_ptr<ExplorerObject> > ExplorerObjectMapItem;
typedef ExplorerObjectMap::iterator                 ExplorerObjectIter;

映射和迭代器是 class 个成员:

ExplorerObjectMap                               mObserverLookup;
ExplorerObjectIter                              mInternalMapIterator;

上述 getFirst() 函数的代码给出了一个编译错误

E2034 Cannot convert 'pair<Subject * const,boost::shared_ptr<ExplorerObject>
 > *' to 'ExplorerObjectMapItem *'

不确定这里发生了什么。任何帮助表示赞赏。

A std::map<K,V> 不包含 std::pair<K,V> 个对象。它包含 std::pair<const K, V> 个对象。缺少 const 是导致转换失败的原因。

您可以通过以下任一方式解决此问题

typedef pair<Subject* const, shared_ptr<ExplorerObject> > ExplorerObjectMapItem;

typedef ExplorerObjectMap::value_type ExplorerObjectMapItem;