C++ 如何返回std::map项

C++ 如何返回std::map项,c++,dictionary,std,C++,Dictionary,Std,我在从驻留在类中的std::map返回项时遇到了一个问题。 我试图创建一个简单的函数,如 ExplorerObjectMapItem* MyClass::getFirst() { mInternalMapIterator = mObserverLookup.begin(); ExplorerObjectMapItem* item = &*mInternalMapIterator; return item; } 其中使用了以下类型定义 typedef map<

我在从驻留在类中的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;
上面的getFirst()函数代码给出了一个编译错误

E2034 Cannot convert 'pair<Subject * const,boost::shared_ptr<ExplorerObject>
 > *' to 'ExplorerObjectMapItem *'
E2034无法将“pair*”转换为“ExplorerObjectMapItem*”
不知道这里发生了什么。非常感谢您的帮助。

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

你可以用任何一种方法来解决这个问题

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

另一方面,使用键为指针的映射非常容易出错。其中一个错误是对指针值进行查找,而该指针值不再有效。我理解。地图以主题/观察者模式使用。在主题消失后,我无法正确移除观察者。当一个主题死亡时,我将主题指针设置为null,这一映射很有帮助。然后一个后续的“挤压”函数遍历地图,移除主体为空的所有观察者,最终移除项目本身。现在不知道如何改变它…太好了!就这样。做出改变似乎很好地解决了问题。
typedef pair<Subject* const, shared_ptr<ExplorerObject> > ExplorerObjectMapItem;
typedef ExplorerObjectMap::value_type ExplorerObjectMapItem;