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

有没有办法在c地图中存储自动值?[副本]

严子默
2023-03-14

嘿,我是c的新手,我正在尝试创建一个可以存储多种类型的地图:

map<sting, `auto`> test_map;
test_map["first elem"] = 1;
test_map["second elem"] = 'c';

Wich显然给我带来了一些错误。

我在网上查了一下,发现了一些有趣的东西,但没有答案。也许我漏掉了一点c语言词汇。

我也会尝试一些关于任何类型的一流三明治商店,我不知道它是否有效。

map<string, `my_class`> test_map;
map["first_elem"] = my_class("string");
map["first_elem"] = my_class(12); 

谢谢你的帮助!

共有1个答案

宰父宾实
2023-03-14

auto关键字并不意味着可以将多个值类型分配给同一个存储,它只是一个c语言的自动类型推断工具,在处理复杂类型名称或纯不可写类型(如捕获lamdas)时非常有用。例如:

void foo()
{
    bool b = true;
    auto l = [&]() -> bool { return !b; };
}

如果要在同一存储空间中存储不同(或任何)类型的值,请尝试使用 std::varian 或 std:any(两者都需要 c 17 或更高版本)。

< code>std::variant允许您存储先前指定的类型之一,并且不做额外的分配(它的大小足以容纳任何指定类型的对象)。它是< code > union 的类型安全替代方案。

void foo()
{
    std::map<std::string, std::variant<int, float, char>> c; // this can only map int, float and char to std::string
}

std::any可以存储您想要的任何类型,但会在必要时进行分配。

void foo()
{
    std::map<std::string, std::any> c; // this can map any type of value to std::string
}
 类似资料:
  • 我尝试了以下代码,但出现了错误-spring web ResponseEntity无法序列化。 org.springframework.data.redis.serializer.SerializationException:无法序列化;嵌套异常org.springframework.core.serializer.support.SerializationFailedException:无法使用

  • 我希望从C中的浮点数组中计算中值: FloatArray包含一个常规的C浮点数组。 我正在使用,但想知道是否有像这样的工具可以处理数据?现在,我正在制作一个副本,然后在扔掉副本之前执行。如果数据没有像这样的东西,是否有更有效的方法使用复制步骤来计算信息,从而避免潜在的额外O(n)循环?也许性能影响可以忽略不计?我的数组大小可能在20亿量级。

  • 我正在为一个自定义应用程序编写一个指导图,我们需要在我的组织内的不同环境中使用该应用程序。这个应用程序在Kubernetes中有一些部分(这就是为什么我要编写Helm图表),在K8S之外有一些部分,更具体地说,是我用Terraform编写的AWS中的各种资源。

  • 我正在尝试在javascript中重用模板文字。 这不起作用: 我认为更改变量会在模板中动态更改。但我学到了其他东西:D 这是可能的吗?如果是的话,正确的做法是什么? 谢了。

  • 我们正在考虑从MySQL迁移到AWS Aurora。我们正在为开发人员运行vagrant,因此每个虚拟盒子都有自己的mysql实例。有没有办法在本地运行极光?如果不是,处理这种情况的最佳方法是什么?

  • 使用PHP-PDO和SQLite,我可以编写一个PDO调用来检查表中是否存在某一行(通过检查主键),如果不存在,则编写另一个PDO调用来创建该行。但我觉得应该可以在一个命令中实现……类似于“如果不存在,则创建表”。是否有类似“不存在时插入行”的内容?