gpt4 book ai didi

具有可变大小和可变类型的 C++ 容器

转载 作者:太空宇宙 更新时间:2023-11-04 15:49:45 25 4
gpt4 key购买 nike

我正在尝试创建类似列表的内容。然而,列表的不同实例可能具有不同数量的条目,并且条目的类型基于用户给出的输入。例如,用户声明他们希望列表中每个条目的结构包含一个 int id、一个 std::string 名称、一个 double metricA 和一个 long metricB。基于此输入,创建以下内容:

struct some_struct {
int id;
std::string name;
double metricA;
long metricB;
}

list<some_struct> some_list;

用户输入可以从文件中读取,在屏幕上输入等。此外,它们在 some_struct 中是可变数量的条目。换句话说,它可能有上面列出的条目,可能只有其中的 2 个,也可能有 10 个完全不同的条目。有没有办法创建这样的结构?

此外,必须能够将比较运算符应用于 some_struct 的每个成员。我可以使用 boost::any 来存储数据,但这会导致比较运算符出现问题,并且还会产生比理想情况更多的开销。

最佳答案

C++ 是一种强类型语言,这意味着您必须声明您的数据结构类型。为此,您不能声明具有任意数量或类型的成员的 struct,必须预先知道它们。

当然,现在有一些方法可以在 C++ 中处理此类问题。举几个例子:

  • 使用映射(std::mapstd::unordered_map)创建“表”而不是结构。将字符串映射到字符串,即将名称映射到值的字符串表示形式,并将它们解释为您的心意。
  • 使用像 boost::any 这样的预先封装的变体类型。
  • 使用多态性 - 将指向基址的指针存储在列表中,并在值上调用虚拟机制调度操作。
  • 为您的输入语言创建一个类型系统。然后有每种类型的值表,并从列表中指向适当的表。

可能有多少 C++ 程序员就有多少其他方法可以做到这一点。

关于具有可变大小和可变类型的 C++ 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10566594/

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