插入字符串键和向量值的映射
我对使用地图有点生疏,需要一点帮助;我已经声明了以下内容。
std::map<std::string, std::vector<double>> myMap;
我定期读取 JSON 数据,其中数据的顺序有时可能会发生变化,或者出现新的数据元素。我的代码的其他部分将遍历 JSON 并提取两个变量(jsonLabel,一个字符串),以及作为双精度值的相关值(latestDouble)。
如果 jsonLabel 已经存在,我想将关联的 latestDouble 添加到向量的末尾;如果它不存在,则创建新的 Key 并启动一个向量。
我试过下面的; 但是我一直崩溃。我假设这是因为地图实际上不够智能,无法在地图中向量的末尾插入 latestDouble 。
myMap.insert(std::make_pair(jsonLabel, latestDouble));
伪示例:
JSON parse #1: [A,43],[B,10],[C,9]
JSON parse #2: [A,10],[C,4],[B,3] /// Change in ordering
JSON parse #2: [A,8],[B,7],[C,2],[D,1] /// New element
Should result in:
A: 43,10,8
B: 10,3,7
C: 9,4,2
D: 1
谢谢你的帮助!
回答
如果字符串 injsonLabel已经作为映射中的键存在,则insert不会向映射中插入任何内容。
而地图insert功能就是插入到地图本身。这对应该是一对键和值类型(其中值应该是双精度向量)。
你似乎想要的只是
myMap[jsonLabel].push_back(latestDouble);
如果键不存在,该operator[]函数将创建一个默认构造的值,因此将为您创建一个空向量。