有一种方法来存储自动值在c++地图?



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

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

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

我一直在网上找,我发现了一些有趣的事情,但没有答案。也许我遗漏了一点c++词汇。

我也会尝试一些类存储关于任何类型,我不知道它是否可以工作。

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

谢谢你的帮助!

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

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

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

std::variant允许您存储前面指定的中的一个类型,不做额外的分配(它的大小足以容纳指定类型的任何对象)。它是unions的类型安全替代品。

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
}

相关内容

  • 没有找到相关文章

最新更新