制作不同类型的地图时遇到问题

Having trouble making a map with different types

我想制作一个地图,其中包含具有字符串值的字符串键,并且第二种数据类型是具有列表值的字符串键。

我尝试按照此线程下提到的解决方案进行操作: 但我不断收到这些错误。感谢任何帮助,我已经在这方面工作了很长时间。

'variant' is not a member of 'std' 即使我把它放在最前面

template argument 1 is invalid 关于字符串语法

no operator "=" matches these operands 上等号


#include <iostream>
#include <map>
#include <string>
#include <list>
#include <variant>

typedef std::map<std::variant<std::string, std::list<std::string>>, std::variant<std::string, std::string>> Dict;

int main(){
    std::list<std::string> List1 {"Teamwork", "Hate"};
    Dict d;
    d["TIME"] = "8:15";
    d["TAGS"] = List1;

    return 0;
}


尝试将您的 c++ 版本更改为 c++17。 如果您使用 visual studio,您可以转到项目 → 属性 → C/C++ → 命令行 /std:c++latest

然后点击应用和确定。

std::map<std::variant<std::string, std::list<std::string>>, std::variant<std::string, std::string>>

是一个带有(stringlist键)和(stringstring)值的映射。允许具有重复类型的变体,但没有必要,这会使事情复杂化。

你想要 std::map<std::string,std::variant<std::string, std::list<std::string>>> 即使用 string 键和(stringlist)值进行映射。

这样编译:

#include <iostream>
#include <map>
#include <string>
#include <list>
#include <variant>
// Prefer using in C++ to typedef.
using Dict = std::map<std::string,std::variant<std::string, std::list<std::string>>>;

int main(){
    std::list<std::string> List1 {"Teamwork", "Hate"};
    Dict d;
    d["TIME"] = "8:15";
    d["TAGS"] = List1;

    return 0;
}

变体是 c++17,如果出现包含错误,请确保已设置它。