在 std::map 中使用"auto"
using 'auto' in std::map
我正在解析一个JSON文件,值可以由整数,字符串或浮点数组成。通常我有一个这样的地图定义:
std::map<std::string, std::string> myMap;
问题是如果可以有不同的数据类型,我不清楚如何使用map,我尝试过:
std::map<std::string, auto> myMap;
但我收到一个错误:
'auto' is not allowed here
我有没有办法将它与不同的数据类型一起使用,或者我需要定义一个对象,它可以包含不同的数据类型,例如:
Class MyObject
{
private:
int integerValue;
std::string stringValue;
public:
void setValue( std::string value, int type );
}
MyObject::setValue( std::string value, int type )
{
if( type == 0 )
stringValue = value;
else if( type == 1 )
integerValue = stoi( value );
}
或者有更好的方法可以做到这一点吗?谢谢!
为了达到你的要求,请使用:
std::map<std::string, std::any> myMap;
例如:
#include <map>
#include <string>
#include <any> // Since C++17
main()
{
std::map<std::string, std::any> myMap;
std::string strName{ "Darth Vader" };
int nYear = 1977;
myMap["Name"] = strName;
myMap["Year"] = nYear;
std::string strS = std::any_cast<std::string>(myMap["Name"]); // = "Darth Vader"
int nI = std::any_cast<int>(myMap["Year"]); // = 1977
}
相关文章:
- 为什么当我为 for(auto& it : myUnorderedMap) {... = std::move(it.second)} 时,我会得到一个 const 引用?
- 为什么"weak.lock()"返回"nullptr" "auto weak=std::make_shared<int>(42);"的定义?
- 为什么 std::gcd/lcm 返回 std::common_type_t<M, N> 而不是 auto?
- 无法通过 std::ref() 使用 auto& 参数调用 std::invoke()
- Xcode STD :: String_view Auto在全局名称空间故障处
- 在 std::map 中使用"auto"
- C++ decltype(auto) or decltype(std::<T>forward(value))?
- C++14 'auto'能够获取函数返回类型,我们还需要 std::result_of<> 吗?
- std::max with lambda and auto
- C 11 std :: bind and auto的编译错误,用于回调函数参数
- 为什么"auto"将字符串声明为 const char* 而不是 std::string?
- 用'auto'和 std::minmax 观察奇怪的行为
- 为什么 std::extent 应用于 auto&的产量为零?
- 如何在不使用 auto 的情况下声明 std::make_tuple 结果的类型
- std::chrono::system_clock::now() without auto
- 在 C++11 中使用 auto foo = "bar" vs std::string
- 为什么不能使用 auto 作为模板类型参数(例如 std::array<auto, 5>)?
- 为什么我不能将 auto 与 std::thread 一起使用?
- const auto std::initializer_list Clang与GCC的差异
- c++ 11 auto, std::function和对重载函数的二义调用