【问题标题】:unable to insert data in a stl map of map of map无法在地图地图的stl地图中插入数据
【发布时间】:2016-10-12 06:59:19
【问题描述】:

我有以下地图声明:

std::map<std::string, std::map<std::string, std::map<std::string, std::string>>> m;

我尝试通过以下方式插入数据:

m.insert({ "HARDWARE\\DESCRIPTION\\System\\BIOS", { "REG_SZ", { "SystemSKU", "SystemSKU" } } });

但它不起作用,插入数据的正确语法是什么?

【问题讨论】:

  • 这可能是我见过的最好的标题
  • 你想做什么?
  • @Treycos :我只是保持直截了当。
  • insert 操作的问题是您正在创建条目而不是内部映射。通过为每个内部地图添加一个额外的打开和关闭大括号,您可以实现相同的目标。看看我的回答。

标签: c++ dictionary std stdmap c++-standard-library


【解决方案1】:

如果你不能让它与初始化列表一起工作,你可以使用经典的方式:

m["HARDWARE\\DESCRIPTION\\System\\BIOS"]["REG_SZ"]["SystemSKU"] = "SystemSKU";

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    This 列表初始化将为您工作:

    std::map<std::string, std::map<std::string, std::map<std::string, std::string>>> m{{"HARDWARE\\DESCRIPTION\\System\\BIOS", 
                            {{ "REG_SZ", {{ "SystemSKU", "SystemSKU" }} }}
                }};
    

    或者,使用插入

    m.insert({"HARDWARE\\DESCRIPTION\\System\\BIOS", 
               {{ "REG_SZ", {{ "SystemSKU", "SystemSKU" }} }} //create inner maps using double braces 
            });
    

    它使用 std::map 的列表构造函数(采用 std::initializer_list> 的构造函数)。

    虽然读和写有点棘手。

    请注意,双括号 {{ 或 }} 一起使用。 内层 {} 标记地图中的单个条目外层 {} 表示整个地图

    为简单起见,喜欢其他答案。

    【讨论】:

    • 这个声明有问题,查看这个链接stackoverflow.com/questions/39895375/…
    • 我尝试运行时,您提供的链接中显示的代码没有错误。
    • 它会在 ms visual studio 2013 中出错,但在 ms visual studio 2015 和 g++ 中不会出错,我使用的是 ms visual studio 2013。
    • 感谢您展示如何像这样初始化地图,但这不适用于“插入”到已经构建的地图中,或者是否有类似的插入方式?
    • @Rumpel。它也非常适合插入。对于插入,您需要将条目作为参数。例如看看它是如何工作的:ideone.com/pbcJ1v
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 2012-04-27
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多