C ++异类字典

时间:2011-06-11 19:23:14

标签: c++ arrays multidimensional-array

我是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

这可能吗?

3 个答案:

答案 0 :(得分:4)

听起来像你想要的

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

将允许与不同键对应的值采用不同的类型。

答案 1 :(得分:1)

由于提问者似乎接受了其中一个答案,这只是一个答案 补充。
如果允许BoostBoost.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的测试。

答案 2 :(得分:0)

myArray声明为

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

显然你不能再做myArray["key1"] = "value1";了,但这是一种强类型语言的权衡。