gpt4 book ai didi

c++ - C++ 中的嵌套字典/数组

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:29:03 25 4
gpt4 key购买 nike

各位,我是一个 Python/C# 的人,我正在尝试学习 C++。在 Python 中,我曾经做过这样的事情:
myRoutes = {0:[1,2,3], 1:[[1,2],[3,4]], 2:[[1,2,3],[[1,2,3],[1,2,3]],[4]]}

基本上,当您有可变长度的数组并且不想为它们浪费二维矩阵时,将数组嵌套到字典中以跟踪它们是一个不错的选择。

在 C++ 中,我尝试了 std::map<int, std:map<int, std:map<int, int> > >它有效,但我觉得必须有更好的方法来做到这一点。

我更喜欢坚持使用标准库,但像 boost 这样的流行库对我来说也是可以接受的。

感谢您的帮助,
阿里

最佳答案

问题的一部分似乎是:“如何在容器中存储异构数据?”有几种不同的方法:

1) 使用现成的数组类型类来抽象出确切的细节(即维度)。示例:Boost Basic Linear Algebra

2) 使用 Boost.variant 明确列出元素类型

   #import "boost/variant.hpp"

typedef boost::variant< ArrayTypeA, ArrayTypeB > mapelement;
typedef std::map<int, mapelement> mappingtype;

variant 建立访客type 有点复杂(它涉及编写 boost::static_visitor<desired_return_type> 的子类,并为您的变体中的每种类型编写一个 operator() 重载)。从好的方面来说,访问者会进行静态类型检查,以确保他们实现了正确的处理程序集。

3) 使用包装器类型,例如 Boost.Any 包装不同类型的兴趣。


总的来说,我认为第一个选项(使用专门的数组类)可能是最可靠的。我也用过variants在最近的代码中大量出现,尽管编译错误很长,但一旦习惯了这些错误,进行编译时检查就很棒,我更喜欢 Python 的“运行并稍后发现你错了”的范例。

关于c++ - C++ 中的嵌套字典/数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5175344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com