[英]Use 2 keys in std::map
我试图用2个键创建一个std::map
。 我可以使用std::pair
来完成它,或者创建一个结构并将其用作键。
在我的软件中,有很多搜索功能。 该功能通过第一或第二键进行搜索。
如果我在地图上有大约1000个项目,我想如果要搜索它会花费一些时间。 所以我认为,如果我制作另一个保存第二个键的std::map
,并且值是1st键,那么我可以取该值并在另一个图中搜索以获得真实值。
但是我的猜测是,这将占用更多的内存。 在这种情况下最好的选择是什么?
蛮力法
您可以将项目存储在std::vector
并具有两个映射:第一个具有第一个键和指向矢量项的指针(或索引),第二个具有第二个键和指向矢量项的指针(或索引)。 问题是修改集时要维护所有三个容器。
指针与索引:指针在注释中正确指出是危险的,但是如果要从向量中删除项目,则指针更简单。 否则索引会更安全。
聪明的方法
您可以使用专门为您的情况设计的Boost.MultiIndex容器。
这是您必须解决的工程决策。
如果您知道key1和key2键集冲突,则多个映射才有意义(IMHO)。 否则,为什么不只将两个键插入同一映射,每个对应的值都引用您的对象?
您不想复制对象,因此可以将它们放入向量中,并将向量索引作为映射值。 或使用键到指针的映射等。
1k项实际上并不多,因此这里我不关心内存的使用,但是可能要考虑使用映射而不是unordered_map(rb树与哈希表)。
另外,如果您从地图上删除项目,则需要同时删除两个键,因此请务必考虑到这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.