Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;具有变量类型值的键值容器_C++_Algorithm - Fatal编程技术网

C++ C++;具有变量类型值的键值容器

C++ C++;具有变量类型值的键值容器,c++,algorithm,C++,Algorithm,我需要的是一个键值容器,用于保存对象的一些已知参数。所有可能的键在编译时都是已知的。值属于不同的类型:POD(整数、指针)和非POD(一些带有构造函数的小型结构) 当前的实现使用非常大的结构和大量的代码来初始化、填充和复制值。所以我想用容器替换这个结构。集装箱必须提供: 1) 通过按键快速访问(恒定时间)。 2) 迭代所有值以复制它们的可能性 我试图想出一些基于数组的方法,但coldn没有成功。我可以制作一些哈希表,但我不知道如何处理不同的值类型 听起来像是std::map是正确的选择 虽然您的

我需要的是一个键值容器,用于保存对象的一些已知参数。所有可能的键在编译时都是已知的。值属于不同的类型:POD(整数、指针)和非POD(一些带有构造函数的小型结构)

当前的实现使用非常大的结构和大量的代码来初始化、填充和复制值。所以我想用容器替换这个结构。集装箱必须提供: 1) 通过按键快速访问(恒定时间)。 2) 迭代所有值以复制它们的可能性


我试图想出一些基于数组的方法,但coldn没有成功。我可以制作一些哈希表,但我不知道如何处理不同的值类型

听起来像是
std::map
是正确的选择

虽然您的键在编译时是已知的,但您可以在初始化过程中使用数据填充std::map结构

对于值,您可能希望实现一个包装器对象,它可以保存int、指针和一些简单的非POD对象,然后将其作为std::hash表中的第二个(值)对象


std::map,inplements
.find(key)
用于快速查找,而
开始()
结束()
用于
::迭代器的听起来像
std::无序映射
(或
boost::无序映射
)是正确的解决方案。只需对对象使用
boost::any
,它们就可以是任何类型。

您可能需要查看存储值的方法。然后,您可以使用
std::map
std::unordered\u map
作为您的容器。

您说过:

所有可能的键在编译时都是已知的

那你一定也知道它的类型

如果类型是整数类型,那么
boost::any
的数组或指针是最佳选择

//if the size is known at compile time!
boost::any objmap[size]; 

//if the size isn't known at compile time
boost::any *objmap = new boost::any[size];

无论您使用什么(数组或指针),键都将是
objmap
的索引,
objmap[key]
将是与键关联的值。

您说过
编译时所有可能的键都是已知的
,那么您也必须知道类型。为什么是键的类型?但是值类型是非异构的。@Mark B:在这种情况下,他可以使用
boost::any
作为值类型。我也编辑了我的帖子。谢谢。我不知道Boost.Variant。