如何填充和编辑地图的std :: array

问题描述

我有一组地图:

std::array<std::map<double,double>,8> freqMap;

当填充它时,我需要在不同的数组索引处向地图添加条目。我知道我可以创建8个不同的地图,将它们填充,然后将它们添加到数组中,但是是否可以保持直接在数组中将条目追加到地图中?

例如,如何将key 5.0,val 3.3的映射条目添加到数组索引2,然后将另一个条目添加到数组索引3,然后将另一个条目附加到再次索引2,依此类推。

我还可以使用std::vector个地图,但仍然看不到以这种方式添加条目的方法。

这里是一个例子。我正在从文件中读取数据,并想直接更新我的数据结构:

while (fin >> arrayIdx >> key>> val)
    freqMaps[arrayIdx] = ??

解决方法

您可以轻松地做到:

while (fin >> arrayIdx >> key>> val)
  freqMaps[arrayIdx][key] = val;

例如,如何将键5.0(值3.3)的映射项添加到数组索引2

freqMaps[2][5.0] = 3.3;

这里是demo

另外,请注意,在double中使用std::map作为键不是一个好主意。

,

您可以使用大括号的初始化列表:

while (fin >> arrayIdx >> key >> val)
    freqMap.at(arrayIdx) = {{key,val}};

while (fin >> arrayIdx >> key >> val)
    freqMap[arrayIdx] = {{key,val}};

假设arrayIdx当然小于8,否则您将无法访问数组,我更喜欢第一种使用at的方法,因为在访问不正确的情况下,例外是抛出,为您提供更好的错误处理选项。

要访问给定键的特定值,假设您要打印该键:

std::cout << freqMap.at(arrayIdx).at(key);

或者循环遍历整个数组:

for (auto& a : freqMap)
{
    for (auto& m : a)
    {
        std::cout << m.first << m.second;
    }
}

Live sample

如果使用C ++ 17或更高版本,则@cigien's demo中提供的循环方法比使用firstsecond节点更好。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...