简体   繁体   中英

Inserting values from Vector to Map

i got some issues trying to put the values of my vector in a new map (maMap) If someone could explain me what contain my ItemIterator or how to do...

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));
    }

}

You forgot to derefrence your iterator:

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

And since everyone asks for a revamped version of your code here we go:

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));
    }
}

You can also use ranged based for if you're at least in C++11.

Your map is of <std::string, Employee*> , but you are trying to add an iterator as the second element of the pair . You need to dereference the iterator to get the Employee pointer.

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

Or to save from dereferencing the same iterator twice, you could just use a range based for loop. As @CaptainObvlious mentions, you can also use std::make_pair to add to your map .

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM