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

时间:2011-08-06 23:54:21

标签: c++ algorithm

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

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

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

4 个答案:

答案 0 :(得分:4)

听起来像std::unordered_map(或boost::unordered_map)是正确的解决方案。只需使用boost::any作为对象,它们就可以是任何类型。

答案 1 :(得分:2)

您可能需要查看Boost.Variant来存储值。然后,您只需使用std::map<Key, boost::variant>std::unordered_map<Key, boost::variant>作为容器。

答案 2 :(得分:0)

听起来std::map是正确的方法。

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

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

std :: map,inplements .find(key)用于快速查找,.begin().end()用于::iterator

答案 3 :(得分:0)

你说:

  

所有可能的密钥在编译时都是已知的。

然后你必须知道类型

类型是整数类型,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]将是与键相关联的值