向vector<map<string, double>>插入元素失败,求正确实现方法
问题分析与正确实现
你的代码存在两个核心问题:
- 容器类型匹配错误:
Fields是vector<map<string, double>>,它的元素是完整的map对象,而非键值对。直接调用vector::insert插入pair完全不符合容器的操作逻辑。 - 类型定义错误:你声明的
pair<string, int>与实际需要的pair<string, double>类型不匹配,和map的value类型冲突。
根据不同的业务需求,正确实现分为两种情况:
情况1:向vector中新增一个包含指定键值对的map
如果需要每次调用都往vector里添加一个独立的map(该map仅包含传入的键值对),代码如下:
void insert(const string& fieldName, const double& fieldValue) { // 构造一个包含目标键值对的map map<string, double> singleFieldMap; singleFieldMap.insert(make_pair(fieldName, fieldValue)); // 将这个map插入到vector末尾(也可以用insert指定其他位置) Fields.push_back(singleFieldMap); }
或者用更简洁的emplace方式:
void insert(const string& fieldName, const double& fieldValue) { Fields.emplace_back(map<string, double>{{fieldName, fieldValue}}); }
情况2:向vector中已存在的map(比如最后一个)插入键值对
如果需要将键值对添加到vector里的某个map中(比如默认操作最后一个,空时先创建),代码如下:
void insert(const string& fieldName, const double& fieldValue) { // 如果vector为空,先创建一个空map if (Fields.empty()) { Fields.emplace_back(); } // 向最后一个map插入键值对 Fields.back().insert(make_pair(fieldName, fieldValue)); // 也可以用[]直接赋值(键不存在则创建,存在则覆盖值) // Fields.back()[fieldName] = fieldValue; }
内容的提问来源于stack exchange,提问作者Nickpick
相关产品推荐
相关产品推荐

