2009-04-26 6 views
0

Ich habe eine durch Leerzeichen getrennte Datei, die einige Schlüssel-> Wert-Paare enthält. Diese sind auf eine Struktur der unten angegebenen Art geladen werden:Hinzufügen von Werten aus einer Datei zu einer Hash-Typ-Struktur in 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; 
} 

dem oben Also, ich kann die folgenden Werte übergeben:

parameterFeatureVector(10, 20); 

Und ich würde erwarten, dass die gleiche erhalten geladen "param" Struktur. Die obigen Werte stammen aus der Datei. Wie würde ich das umsetzen? Wenn das Obige nicht klar ist, zögern Sie nicht, darauf zurückzukommen.

Antwort

1

Ich nehme an, Sie fragen, wie man einen Namen "A" in ein bestimmtes Strukturfeld übersetzt? Wenn ja, hat C++ keine integrierte Möglichkeit, dies zu tun - Sie eine Funktion schreiben müssen:

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 
    } 

} 

Aber ich würde vorschlagen, dass nicht zu tun, und stattdessen eine Karte verwenden:

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

Sie können dann Dinge wie sagen:

0

Ich nehme an, Sie versuchen, eine Sammlung von Schlüsselwertpaare zu verwalten. Ich bin mir nicht sicher, welcher Typ der Schlüsselwertpaare in der Datei verwendet wird.

Sie können den assoziativen Container std::map für diesen Zweck verwenden.

std::map<Ta,Tb> aCollectionOfKeyValuePairs; 

wo

  • Ta - Typ des Parameters A
  • Tb - Typ des Parameters B

Für ex: Wenn beide Ta und Tb sind int dann,

std::map<int,int> aCollectionOfKeyValuePairs; 

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

Dann können Sie, um einzufügen, anrufen:

parameterFeatureVector(10, 20); 
Verwandte Themen