2009-04-26 13 views
0

私は、いくつかのキーと値のペアを含むファイルをスペースで区切っています。これらは、下記タイプの構造にロードされる。ファイルからC++のハッシュタイプ構造体への値の追加

parameterFeatureVector(10, 20); 

と私は同じがにロードされることを期待:だから上記に

#define FV_PARAM1 "A" 
#define FV_PARAM2 "B" 

parameter_t & parameterFeatureVector (
     parameter_t  & param, 
     int    param1, 
     int    param2, 
) { 

    param.addParam(FV_PARAM1, param1); 
    param.addParam(FV_PARAM2, param2); 

    return param; 
} 

、私は次の値を渡すことができます'param'構造体。上記の値はファイルから取得されます。私は同じことをどうやって実行しますか?上記が明確でない場合は、気軽にそれに戻ってください。

答えて

1

名前 "A"を特定の構造フィールドに翻訳する方法を尋ねていますか?もしそうなら、C++はそれを行うの組み込みの方法がありません - あなたは、関数を記述する必要があります。

void Add(parameter_t & p, const std::string & name, int value) { 
    if (name == "A") { 
     p.param1 = value; 
    } 
    else if (name == "B") { 
     p.param2 = value; 
    } 
    else if (....) { // more name tests here 
    } 

} 

しかし、私はマップを使用することを、代わりにやっていないことをお勧め:

std::map <std::string, int> params; 

params["A"] = 42; 
0

私はあなたがキー値のペアのコレクションを管理しようとしていると仮定します。ファイルで使用されているキー値のペアの種類がわかりません。

この目的で、関連コンテナstd::mapを使用できます。

std::map<Ta,Tb> aCollectionOfKeyValuePairs; 

ここ

  • のTa - パラメータのタイプ
  • Tbの - EXのパラメータB

の種類:TaとTbの両方がその後int

ある場合
std::map<int,int> aCollectionOfKeyValuePairs; 

void parameterFeatureVector ( int param1, int param2) 
{ 
    //insert into the map key==>value 
    aCollectionOfKeyValuePairs[param1] = param2; 
} 

次に挿入するために電話をかけることができます:

parameterFeatureVector(10, 20); 
関連する問題