首页 > 解决方案 > 在 std::map 中使用 2 个键

问题描述

我试图std::map用 2 个键创建一个。我可以使用std::pair或创建一个结构并将其用作键。

在我的软件中,有一个经常被调用的搜索功能。此功能按第 1 键或第 2 键搜索。

如果我在地图中有大约 1000 个项目,我想如果我想搜索它需要一些时间。所以我想如果我制作另一个std::map持有第二个键并且值是第一个键的值,那么我可以获取该值并在另一个地图中搜索以获得真正的值。

但我的猜测是这将占用更多内存。在这种情况下,最好的选择是什么?

标签: c++

解决方案


蛮力方法

您可以将您的项目存储在std::vector其中并拥有两个映射:第一个具有您的第一个键和指向向量项目的指针(或索引),第二个具有您的第二个键和指向向量项目的指针(或索引)。问题是在修改您的集合时维护所有三个容器。

指针与索引:正如注释中正确指出的那样,指针很危险,但如果您要从向量中删除项目,则更简单。否则索引更安全。

聪明的方法

您可以使用专为与您的情况完全相同的案例而设计的Boost.MultiIndex容器。


推荐阅读