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> > > :将映射添加到空向量?

c++ vector<string>用iterator遍历

Emscripten 传递 stl c++ map 参数

python数据结构:map<string, vector<int>>

将 C++ 类转换为 JSON

599. 两个列表的最小索引总和C++