2013-07-05 48 views
2

我很新C++容器模板。我收集了記錄。每個記錄都有一個唯一的名稱和一個字段/值對列表。記錄將按名稱訪問。字段/值對的順序很重要。C++ map <string,vector <pair <string,string>>>:將映射添加到空向量?

typedef string  Typecode; 
typedef string  Fieldname; 
typedef string  Fieldvalue; 
typedef vector<pair<Fieldname, Fieldvalue> > Field_value_pairs; 
typedef map<Typecode, Field_value_pairs>  Record_map; 

Record_map   records; 

我想定義一個方法add_record(類型代碼),將一個條目添加到記錄類型類型代碼的一個關鍵和一個空Field_value_pairs載體:因此我設計如下它。 (稍後我會添加一些或全部的字段/值對)。但是我似乎無法弄清楚要使用哪些地圖和方法<>。

我想我想用operator =,如。但是,我應該指定哪些值作爲創建「空對子的向量」?

+0

指定它'Field_value_pairs();' – andre

回答

3

您應該分配爲:

records["foo_record"] = vector<pair<Fieldname, FieldValue> >(); 

的std :: vector的默認構造函數將創建一個空的載體,然後你可以使用

records["foo_record"].push_back(pair<Fieldname, FieldValue>("name", "value")); 
1

默認構造Field_value_pairs對象,將其添加新值並將其分配給新的地圖條目。

void add_record(Record_map& records, Typecode const& code) 
{ 
    records[code] = Field_value_pairs(); 
} 

請注意,這將覆蓋該Typecode的任何現有條目。如果要僅在尚不存在的情況下有條件地添加Typecode,請使用map::find來確定條目是否存在。

void add_record(Record_map& records, Typecode const& code) 
{ 
    if(records.find(code) == records.end()) { 
     records[code] = Field_value_pairs(); 
    } else { 
     // entry exists, do something else 
    } 
} 
相關問題