4

例えば:

コード 1:

if((iter = map.find(key)) != map.end()) {
    return iter->second;
}
return 0;

コード 2:

if(map.count(key) > 0) {
    return map.at(key);
}
return 0;

code2ははるかに単純ですが、両方ともmap.count()O map.at()(logn) 時間かかります。最後の検索アイテムをキャッシュに保存して同じアイテムの検索を高速化する機能を提供しますか?std::mapそれとも、マップ全体で 2 回目の検索を実行するだけですか?

4

3 に答える 3

4

いいえ、私の知る限り、C++ 標準ライブラリの実装でキャッシュを使用するものはありません。C++11 では、コンテナーが複数のリーダーに対してスレッドセーフである必要があります。そのためには、キャッシュへのアクセスを同期する必要があります。あなたがそれを望まなくても、それは速度のペナルティをもたらします。C++ の標準的な慣行は、明示的に必要または望まないものに対しては料金を支払うべきではないということです。

于 2013-05-04T10:55:17.747 に答える
1

それはできますが、私が知っている人は誰もしません。したがって、慣用的な解決策は、変数を使用することです。

auto results = myMap.find( key );
return results == myMap.end()
    ? NULL
    : &results->second;

短く、クリーンで、簡単に理解できます。(そして、プログラムの正しさについての推論を非常に困難にする複数のリターンを回避します。)

于 2013-05-04T11:54:15.050 に答える