我有一个代码:
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
也是如此,只是好奇我如何更改变换才能更改值。
答案 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