如何在c++中高效地创建map中的map

How to create a map in map efficiently in c++

本文关键字:map 创建 高效 中的 c++      更新时间:2023-10-16

我在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::mapoperator[](以及容器、集合、多映射等)的工作原理如下:

  • 如果key参数不在容器中,则将与该key一起构造的value默认值添加到map(如果是set,则添加密钥)并返回
  • 如果key参数在容器中,则返回value

正如@IgorTandetnik建议的那样,如果你想添加(例如:一个计数器作为两级map的信息),代码totalmap[1][2]++就会起作用。

  1. totalmap[1]map中创建一个新元素(键:1,值:map<int, int>{},默认构造,空)并返回
  2. totalmap[1][2]inner map中创建一个新元素(关键字:2值:0)并返回
  3. totalmap[1][2]++递增inner map的返回值