複数のキーを使用して 1 つの値を返す QHash のようなルックアップ テーブルを実装する最善の方法を見つけようとしています。Boost ライブラリにも同様の機能があると読みましたが、可能であればこれを避けたいと思います。
私がやりたいことの例は次のとおりです(明らかに、次の擬似コードは不可能です):
//First key (int) - Engine cylinders
//Second key (int) - Car weight
//Value (int) - Top speed
MyLookup<int, int, int> m_Lookup
m_Lookup.insert(6, 1000, 210);
m_Lookup.insert(6, 1500, 190);
m_Lookup.value(6, 1000); //Returns 210
私の最初の (そして非常に遅い) アイデアは、単に Struct を作成し、条件を満たす項目が見つかるまでリストを反復処理するというものでした。
Struct Vehicle {
int cyl;
int weight;
int speed'
}
QList<Vehicle> carList; //Assume this is populated
for(i = 0; i < carList.length; ++i) {
if(carList[i].cyl == 6 && carList[i].weight == 1000) {
return carList[i].speed; } }
私のもう 1 つのアイデアは、2 つのキーを 1 つのキーに連結し、必要に応じて 2 つのキーを結合および分離する関数をいくつか実装することでした。これは機能し、おそらく完全な反復よりもはるかに高速ですが、少しハッキングされているようです。
QHash<QString, int> m_Lookup;
m_Lookup.insert("6|1000", 210);
これを試して達成するためのより良い方法を知っている人はいますか?