【问题标题】:C++ map<string, vector<pair<string, string> > > : adding a mapping to an empty vector?C++ map<string, vector<pair<string, string> > > :将映射添加到空向量?
【发布时间】: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();

标签: c++ templates map vector containers


【解决方案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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 2014-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多