如何填充和编辑 std::array 个地图
How to populate and edit a std::array of maps
我有一组地图:
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;
For example, how would I go about adding a map entries of key 5.0, val 3.3 to array index 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;
}
}
如果您使用 C++17 或更高版本, 中提供的循环方法比使用 first
和 second
节点更好。
我有一组地图:
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;
For example, how would I go about adding a map entries of key 5.0, val 3.3 to array index 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;
}
}
如果您使用 C++17 或更高版本,first
和 second
节点更好。