std :: map通过transform替换现有元素

时间:2016-01-14 08:08:26

标签: c++ c++11

我有一个代码:

std::vector<int> vector = {1, 3, 5, 7, 9};
using my_type = std::pair<int, int>;
std::map<int, boost::optional<my_type>> map;
for (const auto &i : vector) {
    map[i] = boost::none;
}
const my_type val = {1, 5};
std::transform(vector.cbegin(),
               vector.cend(),
               std::inserter(map, map.end()),
               [&val](const int &i) {
                   return std::make_pair(i, boost::optional<my_type>(val));
});

一切正常但std::transform不会通过用现有密钥替换值来更改地图,所以我有:

{ 
    {1, boost::none},
    {3, boost::none},
    {5, boost::none},
    {7, boost::none},
    {9, boost::none},
}

是否有可能使其工作如下简单的基于范围?

for (const auto &i : vector) {
    map[i] = boost::optional<my_type>(val));
}

P.S。我知道std::inserter是如何工作的,std::map::insert也是如此,只是好奇我如何更改变换才能更改值。

1 个答案:

答案 0 :(得分:5)

不在JSONArray arr = new JSONArray(JsonString); for(int i=0; i<= arr.length(); i++) { JSONObject obj = arr.get(i); obj.getString('test1'); // these are your strings obj.getString('test2'); } ,因为inserter仅插入元素且仅在insert中没有元素时才会插入元素。 C ++ 17中会有insert_or_assign

map

Live