如何在c++中高效地创建map中的map
How to create a map in map efficiently in c++
我在c++中总是使用多级映射,比如map<int,map<int,map<int,int>>>
,但我找不到一种非常有效的方法来更新或创建它。假设我想在一个用于计算点的映射中插入一个点(1,2),我会做以下操作:
map<int,map<int,int>> totalmap;
if (totalmap.find(1)==totalmap.end()){
map<int,int> map1;
map1[2]=1;
totalmap[1]=map1;
}
else{
auto& map1 = totalmap[1];
if (map1.find(2)==map1.end())
map1[2]=1;
else
map1[2]++;
}
当我需要创建一个3或4级地图时,我必须编写太多代码。我认为一定有比这更好的方法。我唯一能想到的方法是使用多映射将所有键组合为一个键,但有时我真的需要逐个查询键。
std::map
的operator[]
(以及容器、集合、多映射等)的工作原理如下:
- 如果
key
参数不在容器中,则将与该key
一起构造的value
默认值添加到map
(如果是set
,则添加密钥)并返回 - 如果
key
参数在容器中,则返回value
正如@IgorTandetnik建议的那样,如果你想添加(例如:一个计数器作为两级map
的信息),代码totalmap[1][2]++就会起作用。
totalmap[1]
在map
中创建一个新元素(键:1,值:map<int, int>{}
,默认构造,空)并返回totalmap[1][2]
在inner map
中创建一个新元素(关键字:2值:0)并返回totalmap[1][2]++
递增inner map
的返回值
相关文章:
- C++如何创建 std::map
- std::map:当元素不可默认构造时创建/替换元素
- 如何创建一个模板化函数,可以在任何具有字符串键的 std::map 上运行?
- 创建可以遍历 std::map 值的通用模板迭代器的最简单方法是什么?
- 创建一个变体类和 std::map<变体,变体>
- 当 map 是一个整数数组并且由 operator[] 创建时,它是否初始化其映射类型
- std::map<int, A> 运算符 [] 需要使用空构造函数创建 A
- 如何在C++中创建将函数与参数相关联的 Map?
- 动态创建一个继承的类,使用STD :: MAP使用基类指针访问
- 为 map<int、pair<int、int 创建比较器>>
- C++填充一个std::map创建不必要的对象
- 如何创建一个以键为输入并在C++std:map中查找值的模板函数
- 为 map<T1、T2> 迭代器创建模板函数
- 从C 中的MAP的随机子集创建新地图
- 为什么map使用运算符[]创建新条目
- 如何在 c++ 中创建 map<string, class::method>
- 用于从 std::map 的最后 n 个元素创建 std::vector 的惯用C++
- 如何在c++中高效地创建map中的map
- 如何创建一个std::map的常数值,它仍然可以被[]操作符访问
- 如何确定'std::map'创建的用于'boost::pool_allocator'的节点的大小(以跨平台方式)?