tmp
ループの前後で毎回作成および破棄され、の文字列データのコピーを取得しline
ます。したがって、次のように、安価で改善の可能性が高く、悪化する可能性はほとんどありません。
if(a) s = "_a";
else if(b) s = "_b";
line += s;
mymap.insert(line, s);
s
タイプも指定します。リテラルのコピーのみが含まれるループごとに1回const char*
を割り当てることはあまり意味がありません。ただし、への呼び出しによってstring
変換されるため、どちらの方法でもそれほど多くはありません。string
insert
コードの単純さ/可読性/保守性/設計を損なうことがなければ、改善の可能性が高く、悪化する可能性はほとんどありませんが、時期尚早の最適化ではありません。line
との範囲が大きいほど、s
読者/メンテナを誤解させる可能性があるため、それらを使ってトリックを実行するリスクが高くなります(それぞれ値の変更とタイプの変更)。これが、短い関数が優れている理由の1つです。
mymap.insert(std::move(line), s);
C ++ 11では、別の簡単な可能性のある改善のために書くことができます。
とはいえ、不必要なコピーと割り当てをいくら行っても、それにかかる時間は、のI/Oの時間よりも短いことに気付くかもしれませんgetline
。この場合、コードを書くための2つの非常によく似た方法があり、そのうちの1つはより効率的である必要があります。したがって、それを使用する方がよいかもしれませんが、それが必ずしも違いを生むと考えて過大評価しないでください。