我需要的是一个键值容器,用于保存一些众所周知的对象参数。所有可能的密钥在编译时都是已知的。值属于不同类型:POD(整数,指针)和非POD(一些带结构的小结构)。
当前实现使用非常大的结构和大量代码来初始化,填充和复制值。所以我想用容器替换这个结构。容器必须提供: 1)按键快速访问(恒定时间)。 2)迭代所有值以复制它们的可能性。
我试图想出一些基于数组的方法,但冷却不成功。我可以制作一些哈希表,但我不知道如何处理不同的值类型。
答案 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]
将是与键相关联的值