如何返回std :: map项

时间:2015-04-11 19:54:12

标签: c++ dictionary std

我在从一个类中的std :: map返回一个项目时遇到了问题。 我正在尝试创建一个像

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

使用以下typedef

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

并且map和iterator是类成员:

ExplorerObjectMap                               mObserverLookup;
ExplorerObjectIter                              mInternalMapIterator;

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

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

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

1 个答案:

答案 0 :(得分:2)

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;