[過去ログ] 【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
133(5): はちみつ餃子 ◆8X2XSCHEME [sage] 2017/07/29(土) 08:10:20.47 ID:HavpCAcr(1/4) AAS
>>131131(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へ移す、みたいな場合です。
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; });
みたいな感じ。
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
こういう感じでループ回しているときに削除するとうまく行かないので聞いてみました。
イテレータでもうまくいかなくて。
>>133
algorithm使うんですね。こういう書き方知らなかったです。
167(2): デフォルトの名無しさん [sage] 2017/07/29(土) 17:01:43.15 ID:E0esoNX5(1/3) AAS
>>164164(1): デフォルトの名無しさん [] 2017/07/29(土) 16:15:28.13 ID:mj0H/MXI(1/5) AAS
>>159
まずは意図が伝わるようにと言う意味でシンプルに書くことが重要。
標準ライブラリ使用は最低限のマナー。
チーム開発してると、上記を踏まえずオレオレ判断でパフォーマンスガー言っている人が、一番迷惑なんだよね。
>まずは意図が伝わるように
ならお前、>>133が何してるか説明出来るんだよな?
169(1): デフォルトの名無しさん [sage] 2017/07/29(土) 17:18:24.12 ID:WkR4K9lF(1) AAS
>>167
>>133はすげーわかりやすいだろ
173: デフォルトの名無しさん [] 2017/07/29(土) 17:26:24.48 ID:mj0H/MXI(4/5) AAS
ん?
でも、よく見たら>>133割りとわかりやすいじゃん?
今、スマホの小さい画面で改行が多いから面食らったけど、2行(かな?)でみれば、とてもシンプルで意図も読み取れるわ。
175: デフォルトの名無しさん [sage] 2017/07/29(土) 17:50:22.46 ID:E0esoNX5(3/3) AAS
>>144どう見ても>>133の方が酷いお題改変なのだが
それをさしおいて>>143143(3): デフォルトの名無しさん [sage] 2017/07/29(土) 10:19:10.90 ID:zJVnUUbX(2/6) AAS
>>140
分かりにくいか?
for(auto pair: map1){
if(pair.second < 0){
map2.insert(std::pair<int,int>(pair.first, pair.second);
}
}
for(auto pair: map2){
map1.erase(pair.first);
}
に指摘とはこれ如何に
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.031s