以键作为结构的地图添加
Maps addition with key as a structure
typedef struct A{
string id;
long date;
// operator = and < overloading
}Test;
Map<Test, double> testMap[2];
在代码中,testMap
数组填充了具有某些业务逻辑的键和值。
我需要计算每个A.id
两个地图的总双倍值。请注意,求和应仅基于A.id
而不是整个结构键。
为了实现这一点,我可以使用 for 循环应用正常的蛮力方法并获得结果。
但是我正在尝试找到是否可以优化代码的此问题的替代解决方案。请指教。
一种方法是应用嵌套的 std::累积两次,一次用于汇总数组,一次用于汇总每个数组的映射内容:
struct Test
{
string id;
long date;
bool operator<(Test const& test) const
{
if(date == test.date)
return id < test.id;
return date < test.date;
}
};
double sum_per_id(std::array<std::map<Test, double>, 2> const& testMapArray,
std::string const& id)
{
return std::accumulate(std::begin(testMapArray), std::end(testMapArray), 0.0,
[&id](double d, std::map<Test, double> const& testMap)
{
return d + std::accumulate(std::begin(testMap), std::end(testMap), 0.0,
[&id](double d, std::map<Test, double>::value_type const& p)
{
if(id == p.first.id)
return d + p.second;
return d;
});
});
}
int main()
{
std::array<std::map<Test, double>, 2> testMapArray;
testMapArray[0][{"A", 0}] = 0.1;
testMapArray[0][{"B", 1}] = 0.2;
testMapArray[1][{"A", 2}] = 0.3;
testMapArray[1][{"B", 3}] = 0.4;
std::cout << "sum: " << sum_per_id(testMapArray, "A") << 'n';
}
输出:
sum: 0.4
相关文章:
- 如何使用 emplace 添加到C++中的地图
- 如何将模板函数指针作为值参数添加到地图中
- 在C++中向地图添加对对象的引用
- 是 std::make_pair 在将对象添加到地图时创建副本
- C 将类成员功能添加到地图中
- 以键作为结构的地图添加
- 了解如何使用SFML函数将数据添加到地图中
- 查找地图C 没有在地图中找到已经添加的密钥
- 使用单词键将多个行号的向量添加到我的地图中
- 如何在地图中添加值,并将向量作为值类型
- 在迭代地图时向/从地图添加/删除元素是否安全
- 添加到具有可变值的地图
- 为什么我不能<Derived>在此代码中添加shared_ptr到地图<key_type,shared_ptr<Base>>?
- 添加第三级地图
- 将新条目添加到地图列表中
- 如何将地图作为参数传递并在此方法中添加
- 如何添加到地图 <int、列表<int>>
- 无法将值添加到嵌套在地图内的向量中
- 如何找到一个特定的关键和添加值使用矢量或地图
- C++ 如何将对象添加到地图并返回对地图中新创建的对象的引用