2009-04-26 72 views
0

我有一個空格分隔的文件,其中包含一些鍵 - 值對。這些都是要加載到下面給出的類型的結構:將文件中的值添加到C++中的散列類型結構中

#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; 
} 

所以上面,我可以通過以下值:

parameterFeatureVector(10, 20); 

而且我希望同樣得到加載到'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; 

其中

  • 鉭 - 型參數A
  • 鋱 - 類型參數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); 
相關問題