当前位置: 首页 > 知识库问答 >
问题:

如何在std::map中存储混合类型项?

章昱
2023-03-14

我有如下数据表示:

我需要在我的C应用程序中访问这些数据。我还需要能够通过可变键名关联地访问项目;例如:

std::string key = "ema50";
double value = data[key];

A<code>std::vector

int testingGroups[9] = data["groups"]["testing"];
int validationGroups[9] = data["groups"]["validation"];

我有办法做到这一点吗?我确实更喜欢使用向量和地图,但我对其他解决方案持开放态度,只要我可以关联地访问数据项。

使用这里描述的模板是可行的方法吗?

共有1个答案

阎烨
2023-03-14

在您提供的链接中接受的答案,C std::map持有任何类型的值,实际上是正确的。本质上,您需要一个VARIANT映射-对象可以是任何值,甚至可以是另一个映射(这使您能够拥有多个索引,但不是很漂亮-例如,它可能是类似data[“foo”].asMap[“bar”]的对象)。变体通常是带有提示成员的花式联合,例如。

struct MyVariant {
    int type; // or enum
    union {
        int asInt;
        bool asBool;
        double asDouble;
        // etc...
        std::map<std::string, MyVariant> asMap;
    }
};        

但是,正如在参考问题的公认答案中,您必须能够智能地处理与其他类型联合的指针类型。您可以添加一个“flags”成员来表示内存的所有权(深层拷贝),而不是指向不属于变量的内存的指针(浅层拷贝)。一种联合类型可以是另一种地图,它允许你创建任意深度的结构。

 类似资料:
  • 基本上,我希望MyClass持有一个Hashmap将字段名(字符串)映射到任何类型的值。为此,我编写了一个单独的MyField类来保存类型和值信息。 这是我目前所掌握的: 但是正如您所看到的,映射声明失败了,因为我没有为MyField提供类型参数... 所以我想应该是 或 我有什么办法可以做到这一点吗?

  • 在将中缀表达式转换为后缀表达式的上下文中,使用分流码算法。我想使用一个向量来存储输出,它将存储运算符和数字类型数据。 上面的代码当然不会编译,因为方法没有为定义。我看到两种方法来修复它: 定义 方法 创建一个向量来存储对数字和的引用。 我认为第二个是首选,尽管我不知道创建引用向量是否会带来很多复杂性。

  • 我们有一个DynamoDb表,其中一个列名“createdAt”有时创建为S(String)数据类型,有时创建为N(Number)数据类型。 在我的代码中,如果我定义为String,当我想获取数据时它会失败,它是数字: 如果我定义为Number,当我想获取数据并且它是表中的字符串时失败: 你们有没有人以前也有过同样的问题?应该有办法解决它对吗?并且不能只选择一种数据类型:(

  • 我试图从AbstractList派生一个具有上限可比性的委托类,并希望将列表用作可以包含空值的委托。以下是我的实现: 在main方法中,我尝试用List和List实例化类Mylist “类型不匹配。必需:可比较 为什么是Int?不属于可比类型

  • 问题内容: 我想在[String:SomeClass]类型的Dictionary中存储一个更专业的类型。这是一些说明我的问题的示例代码(也可以在https://swiftlang.ng.bluemix.net/#/repl/579756cf9966ba6275fc794a上使用): 它产生错误。 我已经尝试过强制转换,但是会产生错误。 我也尝试将Dictionary定义为type,但这也没有任何改

  • 我在熊猫的一个大csv中阅读: 我得到: 如何找到输入中导致此警告的第一行?我需要这样做来调试输入文件的问题,输入文件不应该有混合类型。