【问题标题】:C++ Heterogenous DictionaryC++ 异构字典
【发布时间】:2011-06-11 19:23:14
【问题描述】:

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

这可能吗?

【问题讨论】:

  • @Cat 地图不是关联数组吗?
  • @anirudh4444 它们是关联数组,但术语 array 本身通常与恒定时间元素访问相关联。
  • @anirudh4444:那么,关联数组不是数组(反正我不喜欢这个名字)。数组有一个连续的存储。映射通常不会。

标签: c++ arrays multidimensional-array


【解决方案1】:

听起来像你想要的

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

这会让不同键对应的值具有不同的类型。

【讨论】:

  • 一个例子将不胜感激。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    声明myArray

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-10
      • 1970-01-01
      相关资源
      最近更新 更多