制作不同类型的地图时遇到问题
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>>
是一个带有(string
或list
键)和(string
或string
)值的映射。允许具有重复类型的变体,但没有必要,这会使事情复杂化。
你想要
std::map<std::string,std::variant<std::string, std::list<std::string>>>
即使用 string
键和(string
或 list
)值进行映射。
这样编译:
#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,如果出现包含错误,请确保已设置它。
我想制作一个地图,其中包含具有字符串值的字符串键,并且第二种数据类型是具有列表值的字符串键。
我尝试按照此线程下提到的解决方案进行操作:
'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>>
是一个带有(string
或list
键)和(string
或string
)值的映射。允许具有重复类型的变体,但没有必要,这会使事情复杂化。
你想要
std::map<std::string,std::variant<std::string, std::list<std::string>>>
即使用 string
键和(string
或 list
)值进行映射。
这样编译:
#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,如果出现包含错误,请确保已设置它。