は、次のことを仮定しますため、アプリケーションがどのように機能するかに未確認の読み取り
struct C {
... // lots of other stuff
int get(int key) const { return m.at(key); } // This will never throw
private:
std::unordered_map<int, int> m;
};
、私はget
スローしないことを知っています。できるだけ早くget
にしたいと思います。そこで、私はアクセスをチェックしないようにしたいと思います。すなわち、return m[key]
のようなものを書いています。もちろん、私は正確にそれを書くことができませんget
const。しかし、私はget
を維持したいと思います。はです。
struct C {
... // lots of other stuff
int get(int key) const { return const_cast<C *>(this)->m[key]; }
private:
std::unordered_map<int, int> m;
};
良い方法があります:
ここに私が思い付いただけ(醜い)ソリューションですか?
なぜ 'm(key)'が 'm [key]'よりも効率が悪いと思いますか?あなたはそれらを計時しましたか?キーを見つける主な作業は同じですが、唯一の違いは、キーが見つからない場合に起こることです。 – Walter