2013-07-05 49 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 
    } 
} 
相关问题