C ++ map <string,vector <pair <string,=“”string =“”>&gt; &GT; :将映射添加到空向量?</string,>

时间:2013-07-05 19:47:48

标签: c++ templates map vector containers

我是C ++容器模板的新手。我收集了记录。每条记录都有一个唯一的名称,以及一个字段/值对列表。记录将按名称访问。字段/值对的顺序很重要。因此我设计如下:

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(Typecode),它将使用类型为Typecode的键和一个空的Field_value_pairs向量向记录添加一个条目。 (稍后我会添加部分或全部字段/值对。)但我似乎无法弄清楚是什么地图&lt;&gt;和矢量&lt;&gt;使用方法。

我想我想使用 operator = ,就像records["foo_record"] =一样。但是我应该指定什么作为值来创建“空对矢量”?

2 个答案:

答案 0 :(得分:3)

您应该指定为:

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

std :: vector的默认构造函数将创建一个空向量,然后您可以使用

为其添加新值
records["foo_record"].push_back(pair<Fieldname, FieldValue>("name", "value"));

答案 1 :(得分: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 } } 来确定该条目是否存在。

{{1}}