繁体   English   中英

在std :: map中使用2个键

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM