"Hello, yo, me being a simpl-6ren">
gpt4 book ai didi

c++ - C++ 中的分层数据

转载 作者:太空狗 更新时间:2023-10-29 19:41:07 27 4
gpt4 key购买 nike

我如何像在较新的动态语言中那样处理 C++ 中的数据,例如 PHP 中的数组非常整洁:

$arr = array(

"somedata" => "Hello, yo, me being a simple string",

"somearray" => array(6 => 5, 13 => 9, "a" => 42),

"simple_data_again" => 198792,

);

我愿意接受所有建议。

最佳答案

如果你事先知道各种值是什么map将持有,然后使用boost::variant .否则,使用 boost::any .与 boost::any , 您稍后可以将具有任何类型的值 的条目添加到 map 中。


示例代码 boost::variant :

创建 map :

typedef boost::variant<std::string, std::map<int, int>, int> MyVariantType;
std::map<std::string, MyVariantType> hash;

添加条目:

hash["somedata"] = "Hello, yo, me being a simple string";
std::map<int, int> temp;
temp[6] = 5;
temp[13] = 9;
hash["somearray"] = temp;
hash["simple_data_again"] = 198792;

检索值:

std::string s = boost::get<std::string>(hash["somedata"]);
int i = boost::get<int>(hash["simple_data_again"]);

正如 @Matthieu M 在评论中指出的那样, map 的键类型可以是 boost::variant .这成为可能,因为 boost::variant提供默认 operator<提供所有类型的实现都提供它。


示例代码 boost::any :

创建 map :

std::map<std::string, boost::any> hash;

添加条目:

hash["somedata"] = "Hello, yo, me being a simple string";
std::map<int, int> temp;
temp[6] = 5;
temp[13] = 9;
hash["somearray"] = temp;
hash["simple_data_again"] = 198792;

检索值:

std::string s = boost::any_cast<std::string>(hash["somedata"]);
int i = boost::any_cast<int>(hash["simple_data_again"]);

因此,在 boost::any 的帮助下 map 中的值类型可以是动态的(某种程度上)。 key 类型仍然是静态的,我不知道如何让它动态化。


忠告:

C++ 是一种静态类型语言。在动态语言中经常使用的像您帖子中那样的习语并不适合 C++ 语言。违背语言的本质是痛苦的秘诀。

因此,我建议您不要尝试在 C++ 中模仿您最喜欢的动态语言的习语。相反,学习 C++ 的做事方式,并尝试将它们应用于您的特定问题。


引用资料:

关于c++ - C++ 中的分层数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3690276/

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