C++ map<string, vector<pair<string, string> > > :将映射添加到空向量?
Posted
技术标签:
【中文标题】C++ map<string, vector<pair<string, string> > > :将映射添加到空向量?【英文标题】:C++ map<string, vector<pair<string, string> > > : adding a mapping to an empty vector? 【发布时间】:2013-07-05 19:47:47 【问题描述】:我对 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),它将向 records 添加一个条目,其键类型为 Typecode 和一个空的 Field_value_pairs 向量。 (稍后我将添加部分或全部字段/值对。)但我似乎无法弄清楚要使用什么 map 和 vector 方法。
我想我想使用 operator=,如records["foo_record"] =
。但是我应该分配什么值来创建一个“空对向量”?
【问题讨论】:
分配它Field_value_pairs();
【参考方案1】:
你应该指定为:
records["foo_record"] = vector<pair<Fieldname, FieldValue> >();
std::vector 的默认构造函数将创建一个空向量,然后您可以使用向其添加新值
records["foo_record"].push_back(pair<Fieldname, FieldValue>("name", "value"));
【讨论】:
【参考方案2】:默认构造一个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
【讨论】:
以上是关于C++ map<string, vector<pair<string, string> > > :将映射添加到空向量?的主要内容,如果未能解决你的问题,请参考以下文章
C++ map<string, vector<pair<string, string> > > :将映射添加到空向量?