2015-01-23 3 views
2

У меня есть вопрос о объединении карт, имеющих векторы как раздел значения. например, я мог бы иметь следующее:Объединение нескольких карт с векторами в одну карту

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

Это будет работать, но чувствует себя неэффективным. Я не могу использовать операцию вставки карты, так как мне нужно сохранить существующие значения в векторах. Есть ли лучший способ объединить карты, о которых я не думаю?

Благодаря

+1

является Multimap вариант? –

ответ

3

Как отметил Richard Corden Я думаю, что вы действительно хотите быть с помощью std::multimap.

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

Если вы также сделать tempAff и tempAff2std::multimap S вы можете сделать:

affectors.insert(tempAff.begin(), tempAff.end()); 
affectors.insert(tempAff2.begin(), tempAff2.end()); 
Смежные вопросы