C++异构词典
C++ Heterogenous Dictionary
我是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";
了,但这是强类型语言的代价。
相关文章:
- 在C++中,如何创建包含可变模板对象的异构向量?
- 创建异构顶点数据数组的可移植方法
- std::variant vs指向C++中异构容器基类的指针
- C++中的集合(异构类型的数组)
- 从异构列表中提取数据
- Push_back一组(异构)向量的实现
- 使用 std::vector<char> 作为异构记录的存储是否安全?
- 是否可以使用 std::vector<std::any> vec;这将导致异构数据类型
- 异构容器查找 C++98
- 编译时排序的异构元组
- 异构初始化列表
- 派生实例不是指针时的基类的异构容器
- 顺序异构函数执行器
- 我们可以使用异构查找比较器对 STL 关联容器执行"partial-match"搜索吗?
- 异构作业处理器的并行化
- 如何解析没有前置标记的异构列表
- C++异构类型迭代器的迭代器
- 异构变量非类型模板参数计数是否灵活
- 如何在异构类的实例上循环调用具有相同名称和参数的方法
- 具有异构行的数据包表