0

私は使用していますstd::multimap

std::multimap<string,string> map;

以下の要素が含まれています

1 2  
2 3
3 2
1 2
1 0

すべての 1 と 2 を X に置き換えたいです。Googleで長い間検索しましたが、結果が得られませんでした。のようにしてみました

for(it=mmap.begin();it!=mmap.end();it++)
{
   if(it->first == "1" || it->first == "2")
   {
     key = it->second;
     it.erase(it);
     mmap.insert(pair<string,string>("X",key));
   }
}

しかし、間違った結果になりました。サイズは毎回異なり、挿入すると要素が最後に挿入され、for ループが終了することを理解しています。これから抜け出す他の方法はありますか?

4

2 に答える 2

0

サイズは毎回異なり、挿入すると要素が最後に挿入されることを理解しています

いいえ、そうではありません。順序を維持するような位置に新しい要素を挿入します。

あなたがする必要があるのはこれです。

// for "1"
while (auto I = mmap.lower_bound ("1"), I != mmap.end())
{
    mmap.insert(pair<string,string>("X",I->second));
    mmap.erase (I);
}

// Same for "2"
while (auto I = mmap.lower_bound ("2"), I != mmap.end())
{
    mmap.insert(pair<string,string>("X",I->second));
    mmap.erase (I);
}
于 2013-02-25T13:25:49.487 に答える
0

反復中にコンテナを変更しています。これは悪いことです。

置き換えたいすべての値を保存し、それらを削除して、必要なものをすべて元に戻すことをお勧めします。

または、目的の値で新しいマップを作成するだけです

于 2013-02-25T13:12:11.617 に答える