[過去ログ] 【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
131(1): デフォルトの名無しさん [] 2017/07/29(土) 01:30:09.73 ID:wXH6c2tF(1/2) AAS
mapで、あるvalueを持つpairだけを別のmapに移す時はどうやればよいでしょうか?
例えば
unordered_map<int, int> map1{
{0, -10},
{10, -1},
{2, 5},
}
があってvalueが負のもの({0, -1.}と{10, -1})をmap1から削除して
map2へ移す、みたいな場合です。
139(1): デフォルトの名無しさん [sage] 2017/07/29(土) 08:32:03.69 ID:wXH6c2tF(2/2) AAS
>>132132(1): デフォルトの名無しさん [sage] 2017/07/29(土) 02:13:30.18 ID:NWxouBfw(1) AAS
C++14まではmapの要素を直接付け替えることはできないのでそのまま
1 ループやalgorithmで該当する要素を見つける
2 その要素のキーと値でmap2に新しい要素を追加
3 古い要素をmap1から削除
4 該当する要素がなくなるまで1-3を繰り返す
ありがとうございます。
外部リンク:ideone.com
こういう感じでループ回しているときに削除するとうまく行かないので聞いてみました。
イテレータでもうまくいかなくて。
>>133133(5): はちみつ餃子 ◆8X2XSCHEME [sage] 2017/07/29(土) 08:10:20.47 ID:HavpCAcr(1/4) AAS
>>131
std::remove_copy_if を使うのが一番簡単な方法だと思う。
std::remove_copy_if(std::begin(map1), std::begin(map2), std::inserter(map2, std::end(map2)), [](decltype(map2)::value_type x) { return x.second < 0; });
みたいな感じ。
algorithm使うんですね。こういう書き方知らなかったです。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.066s