Комбиниране на множество карти с вектори в една карта

Имам въпрос относно комбинирането на карти, които имат вектори като раздел със стойност. например може да имам следното:

std::map<int, std::vector<Affector*> > affectors;

Искам да създам тази карта, като комбинирам множество по-малки карти. Например:

for (auto ch = chList.begin(); ch != chList.end(); ++ch)
{
    std::map<int, std::vector<Affector*> > tempAff = ch->getemng()->getAffectorsInOrder();
    std::map<int, std::vector<Affector*> > tempAff2 = ch->getpmng()->getAffectorsInOrder()
    //I want to append both of these maps to the top level affectors map
}

Мога да се сетя за очевидното решение, което би било

for (auto ch = chList.begin(); ch != chList.end(); ++ch)
{
    std::map<int, std::vector<Affector*> > tempAff = ch->getemng()->getAffectorsInOrder();
    for (auto aff = tempAff.begin(); aff != tempAff.end(); ++aff)
    {
        affectors[aff->first].push_back(aff->second);
    }
    tempAff.clear();
    tempAff = ch->getpmng()->getAffectorsInOrder();
    for (auto aff = tempAff.begin(); aff != tempAff.end(); ++aff)
    {
        affectors[aff->first].push_back(aff->second);
    }
    ...
}

Това ще свърши работа, но изглежда неефективно. Не мога да използвам операцията за вмъкване на картата, тъй като трябва да запазя съществуващите стойности във векторите. Има ли по-добър начин за комбиниране на картите, за който не мисля?

Благодаря


person user1188999    schedule 23.01.2015    source източник
comment
Мултикарта опция ли е?   -  person Richard Corden    schedule 23.01.2015


Отговори (1)


Както бе споменато от Ричард Кордън, мисля, че наистина искате да използвате std::multimap.

std::multimap<int, Affector*> affectors;

Ако правите също tempAff и tempAff2 std::multimaps, можете да направите:

affectors.insert(tempAff.begin(), tempAff.end());
affectors.insert(tempAff2.begin(), tempAff2.end());
person Jonathan Mee    schedule 23.01.2015