0

このような素朴な質問で誠に申し訳ありません。私はこれが簡単であることを知っています。でも今は何も思い浮かびません。

私はC++を使用しています。これは、処理能力と RAM が非常に少ない組み込みハードウェアを対象としているため、効率が少し心配です。

関数にローカルな 50 のメンバーを持つ 2 つの整数配列があります。最初の配列の要素が指定されている場合、2 番目の配列の対応する番号を特定する必要があり、その逆も同様です。検索用に提供された要素がどの配列、つまり配列 1 または配列 2 に属しているかという情報があります。

元 :Array1 => 500 200 1000 300 .....

 Array2 => 250 170 500  400 .....

Input 500 , Output will be 250

Input 400 , Output will be 300

input 200 , Output will be 170 and so on

配列ルックアップは最も効率が悪いと思います。stl::map は最適なオプションですか、それとも効率的な検索アルゴリズムを探す必要がありますか? これを行う必要があるかどうか、どのオプションを選択するかを知りたいです。

何かご意見は?

4

2 に答える 2

4

読みやすさと少しの効率のために std::map を使用することもできますが、あなたの場合、効率は些細なことです

std::map<int,int> mapping;
.... //populate 
cout <<mapping[200]; //170

ただし、これは 1 つの方法 (配列 1 -> 配列 2) にすぎません。他の方法で行う簡単な方法があるかどうかはわかりませんが、2 つ目のマップを作成します。

逆ルックアップをサポートするには、または (配列 2 -> 配列 1) から移動するために、逆マップ ルックアップはBoost.Bimap の使用を提案します。

于 2013-01-04T05:33:55.437 に答える
1

私によると、それを行うには2つの方法があり、両方ともすでに提案されています。

  1. 両方の配列をキーペア値としてマップに配置し、マップをトラバースして対応する値またはキーを見つけます。

  2. 入力がある配列をトラバースし、インデックスを計算します。そのインデックスの値を他の配列から取得します。

簡単なので、2番目のソリューションを使用します。さらに、静的配列には 50 要素しかないため、パフォーマンスについて心配する必要はありません。

于 2013-01-04T07:19:18.873 に答える