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

那可能吗?

最佳答案

由于发问者似乎已经接受了答案之一,所以这仅仅是一个
补充。
如果允许使用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的测试。

关于c++ - C++异类字典,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6318033/

10-13 22:58