2

我对 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 向量向记录添加一个条目。(稍后我将添加部分或全部字段/值对。)但我似乎无法弄清楚要使用什么 map<> 和 vector<> 方法。

我想我想使用operator=,如records["foo_record"] =. 但是我应该分配什么值来创建一个“空对向量”?

4

2 回答 2

3

您应该分配为:

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

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

records["foo_record"].push_back(pair<Fieldname, FieldValue>("name", "value"));
于 2013-07-05T19:50:41.017 回答
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
    }
}
于 2013-07-05T19:51:42.360 回答