将值从Vector插入Map

时间:2014-10-22 12:39:05

标签: c++ vector map

我在尝试将矢量值放在新地图(maMap)时出现了一些问题 如果有人能解释我包含我的ItemIterator的内容或怎么做......

map<std::string,Employee*> Entreprise::convertiVectorMap() const
{
    map<std::string,Employee*> maMap;
    vector<Employee*>::const_iterator ItemIterator;
    for(ItemIterator = vector_employe.begin(); ItemIterator != vector_employe.end(); ItemIterator++)
    {
        maMap.insert(std::pair<string,Employee*>(ItemIterator->getNom(),ItemIterator));
    }

}

2 个答案:

答案 0 :(得分:3)

你忘记了你的迭代器:

maMap.insert(std::pair<string,Employee*>((*ItemIterator)->getNom(),*ItemIterator));

由于每个人都在这里要求提供代码的改版版本,我们会去:

map<std::string,Employee*> Entreprise::convertiVectorMap() const
{
    map<std::string,Employee*> maMap;
    for(vector<Employee*>::const_iterator ItemIterator = vector_employe.cbegin(), 
        ItemIteratorEnd = vector_employe.cend(); 
        ItmeIterator != ItemIteratorEnd; ++ItemIterator)
    {
        Employee* ptr = *ItemIterator;
        maMap.insert(std::make_pair(ptr->getNom(),ptr));
    }
}

如果您至少使用C ++ 11,也可以使用ranged。

答案 1 :(得分:3)

您的地图是<std::string, Employee*>,但您尝试添加迭代器作为pair的第二个元素。您需要取消引用迭代器以获取Employee指针。

maMap.insert(std::pair<string,Employee*>((*ItemIterator)->getNom(), *ItemIterator));

或者为了保存两次取消引用相同的迭代器,您可以使用基于范围的for循环。正如@CaptainObvlious提及的那样,您也可以使用std::make_pair添加到map

for(auto const employee: vector_employe)
{
    maMap.insert(std::make_pair(employee->getNom(), employee));
}