C++异构词典

C++ Heterogenous Dictionary

本文关键字:异构 C++      更新时间:2023-10-16

我是C++的新手,最近我发现我们可以使用以下代码初始化字符串集合:

map <string,string> myArray;
myArray["key1"] = "value1";
myArray["key2"] = "value2";
cout<<myArray["key1"]<<endl; //result: value1

但是,如果我必须分配给key2而不是一个字符串,而是另一个集合,该怎么办?我想它会是这样的:

map <string, ???another map???> myArray;
map<string,string> secondArray;
secondArray["foo"] = "bar";
myArray["key1"] = "value1";
myArray["key2"] = secondArray;
cout<<myArray["key2"]["foo"]<<endl; //expected result: bar

这可能吗?

听起来你想要

std::map<std::string, boost::any> myArray;

这将使得对应于不同键的值呈现不同的类型。

由于提问者似乎已经接受了其中一个答案,这只是一个补充
如果允许Boost,Boost.Variant可能达到目的
例如,下面的代码打印问题中的bar

#include <boost/variant.hpp>
#include <map>
#include <string>
#include <iostream>
int main() {
  using namespace std;
  using namespace boost;
  typedef map<string,string> map_t;
  map <string, variant<string, map_t> > myArray;
  map_t secondArray;
  secondArray["foo"] = "bar";
  myArray["key1"] = "value1";
  myArray["key2"] = secondArray;
  cout<<get< map_t >( myArray["key2"] )["foo"]<<endl;
}

这是一个关于ideone的测试。

myArray声明为

map <string, map <string,string> > myArray;

显然,您不能再执行myArray["key1"] = "value1";了,但这是强类型语言的代价。