私は、文字列のマップを使用して動作しますC++で簡単なパーサを書いている静的なマップを生成すると、「ハンドラ」関数ポインタに「トリガー」、私の質問は、実装のほとんどの「静的」と効率的な方法であるものです地図へのアクセスとアクセス?が効率的に
まず、メソッドを考えました。 Parser::add_handler
、これはパーサーのマップにトリガ/ハンドラを追加しますが、私が知る限り、コンパイル時にデータが分かっている間はプログラムが実行されるたびに実行する必要があります。 (プラス側にあるが、それらは唯一各インスタンス化パーサに対して一度実行され、必要はないであろう。)
Iが仮想メソッドを使用して考え、例えばParser::get_handlers
パーサーのハンドラーマップを返すために派生クラスで実装されます。これは、パーサのマップ生成関数への少なくとも1回の呼び出しで、パーサの作成されたすべてのインスタンスに対して仮想関数呼び出しを必要とするものの、よりうまくカプセル化されたソリューションのようです。
現時点では後者のアプローチが望ましいと思われますが、各実行時に動的に生成されるマップは残っていますが、これを回避するには離れていますか?あなたが動的にマップを構築したくない場合は
私は 'std :: map'がおそらく前方にあると思います。ほとんどの場合、マップ内の10個の要素とソースファイル内の何千もの行が一致する可能性がありますルックアップを必要とするトリガー。 – connec
'std :: lower_bound'の配列は' std :: map'より高速です。パフォーマンスが問題の場合は、両方を試してください。 –
計画に似ています。私はパフォーマンスが問題になるとは思っていますが、もしあれば私には別の選択肢があることを知ってうれしいです。 – connec