地图中的任何类型的值

时间:2013-12-04 07:22:19

标签: c++ map

我已经使用以下代码:

#include <string>
#include <map>
#include <vector>

typedef std::map<std::string, std::map<std::string, std::map<std::string, std::string> > > SCHEMA;

int main() {
    SCHEMA tables;

    // Schema table
    tables["table_name"]["row_id"]["field_name"] = "value";
}

我想修改 typedef ,将“row_id”作为数字索引和任何类型的值(自动检测的种类)。我该怎么做才能实现这样的目标呢?

tables["table1"][0]["field1"] = "value of any type";

1 个答案:

答案 0 :(得分:1)

数字索引很简单,只需将std::string替换为int即可。 “任何类型的值”对于获得正确的C ++来说可能很棘手,如果不仔细完成,可能会导致问题。您可以使用void *(错误)或union(确定),但更好的选择可能是某些变体实现,例如boost::variant,因此typedef会读取,例如:

typedef std::map<std::string, std::map<int, std::map<std::string, boost::variant<int, std::string> > > > SCHEMA;