如何向std::map值字段中已存在的std::vector追加更多元素
问题原因及实现方案
根本原因
std::map的insert()方法仅当目标key不存在时才会执行插入操作,若key已经存在,插入请求会被直接忽略,不会修改原有key对应的值。你两次插入操作都使用相同的key1,第二次携带s2的插入并没有生效,因此无法看到s2的元素。
给已有key对应的vector追加元素的方法
场景1:确定key1已经存在于map中
直接通过operator[]获取对应vector的引用,调用vector的插入接口追加元素即可:
// 将s2的所有元素追加到key1对应vector的末尾 my_map_2["key1"].insert(my_map_2["key1"].end(), s2.begin(), s2.end()); // 也支持单个元素追加 my_map_2["key1"].push_back("new_element");
场景2:不确定key1是否存在于map中
优先用find方法判断key是否存在,避免operator[]在key不存在时自动创建空vector占用额外空间:
auto it = my_map_2.find("key1"); if (it != my_map_2.end()) { // key存在,直接追加元素 it->second.insert(it->second.end(), s2.begin(), s2.end()); } else { // key不存在,新增键值对 my_map_2.emplace("key1", s2); }
额外注意
你原有代码的遍历逻辑固定访问下标3到5的元素,当vector长度不足6时会触发越界访问,属于未定义行为,可能导致程序崩溃、输出乱码等异常。建议改为遍历vector本身:
for(auto const &map_item: my_map_2) { std::cout << "key: " << map_item.first << std::endl; for (auto const &elem : map_item.second) { std::cout << " " << elem << std::endl; } }
内容的提问来源于stack exchange,提问作者TheWaterProgrammer
相关产品推荐
相关产品推荐

