将多个地图与矢量组合成一个地图
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;
如果你还制作 tempAff
和 tempAff2
std::multimap
,你可以这样做:
affectors.insert(tempAff.begin(), tempAff.end());
affectors.insert(tempAff2.begin(), tempAff2.end());
我有一个关于组合具有矢量作为值部分的地图的问题。例如,我可能有以下内容:
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;
如果你还制作 tempAff
和 tempAff2
std::multimap
,你可以这样做:
affectors.insert(tempAff.begin(), tempAff.end());
affectors.insert(tempAff2.begin(), tempAff2.end());