我是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"] =
一样。但是我应该指定什么作为值来创建“空对矢量”?
答案 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}}