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