以键作为结构的地图添加

Maps addition with key as a structure

本文关键字:地图 添加 结构      更新时间:2023-10-16
    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