我在尝试将矢量值放在新地图(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));
}
}
答案 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));
}