C ++使用相同和/或不同的键将映射复制到另一个映射

时间:2017-12-13 15:25:15

标签: c++ dictionary vector

我正在尝试使用每种多种基因型模拟不同的群体。每个群体都有一个地图(mOccurrences),其中key =基因型,value =具有该基因型的个体数量。 这些种群应该迁移,当个体进入另一个生态位时,应更新生态位图以反映新种群的基因组分布。 因此,一旦我让我的个人迁移,我会尝试更新mOccurences;现在一些传入的基因可以与群体中的当前基因相同,因此它们只应该被添加,而其他基因可以是新的,因此它们应该在地图内创建。 我试图迭代收入者的地图,然后使用:

mOccurrences。[New-> first] + = New-> second;

但由于某种原因,它只添加了不存在的基因型,对于两个群体共有的基因型,个体数量不会改变。

我也试过了find方法和插入但是无济于事......

{{1}}

2 个答案:

答案 0 :(得分:0)

你的代码很乱,甚至都不会编译。 (例如mOccurences.insert(New);无效)。看起来你只需要这个:

void Population::addOccurrences( std::map<Allele, size_t> immigrants )
{
     for( std::map<Allele, size_t>::const_iterator it = immigrants.begin(); it!= immigrants.end(); ++it)
        mOccurrences[ it->first ] += it->second;
}

注意:您应该将参数类型更改为const引用,没有理由按值复制它,这可能很昂贵。如果你可以使用C ++ 11:

void Population::addOccurrences( const std::map<Allele, size_t> &immigrants )
{
     for( const auto &im : immigrants )
        mOccurrences[ im.first ] += im.second;
}

答案 1 :(得分:0)

我找到了解决方案!

void Population::addOccurrences( std::map<Allele, size_t> immigrants ) {

mSize = 0; //number of individuals in the niche in total must be updates 
std::map<Allele, size_t>::iterator New; 
std::map<Allele, size_t>::iterator it; 

for(it = mOccurrences.begin(); it != mOccurrences.end(); ++it) {

    Allele temp = it->first; 
    for(New = immigrants.begin(); New != immigrants.end(); ++New) {
        if(temp == New->first) { 
            it->second += New->second; 
            immigrants.erase(New); 
        }
    }
}
mOccurrences.insert(immigrants.begin(), immigrants.end()); 

for(it = mOccurrences.begin(); it!= mOccurrences.end(); ++it) {

    mSize+= it->second; 
}


}