将多个地图与矢量组合成一个地图

Combining multiple maps with vectors into one map

我有一个关于组合具有矢量作为值部分的地图的问题。例如,我可能有以下内容:

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

这可行,但感觉效率低下。我不能使用地图的插入操作,因为我需要保留向量中的现有值。有没有更好的方法来组合我没有想到的地图?

谢谢

Richard Corden 所述,我认为您真的想使用 std::multimap

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

如果你还制作 tempAfftempAff2 std::multimap,你可以这样做:

affectors.insert(tempAff.begin(), tempAff.end());
affectors.insert(tempAff2.begin(), tempAff2.end());