C++映射有2个键,这样任何1个键都可以用来获取值

C++ map with 2 keys, such that any 1 key can be used to get the value

本文关键字:都可以 获取 1个 任何 映射 2个键 C++      更新时间:2023-10-16

我有一个用例,其中我必须从映射中获得一个值,给定一个键。现在键可以是ID(integer(或Name(string(。

我考虑了以下结构

map1:-ID->值

map2:-名称->ID

并将此结构隐藏在一个通用抽象下,以便可以使用名称或ID来检索值。

有更好的方法吗?

看看boost::multi_index。它允许您使用所需的任意查找组合来制作容器。

struct item
{
int ID;
std::string Name;
value_t Value;
};
namespace bmi = boost::multi_index;
using map_t = bmi::multi_index_container<item, bmi::indexed_by<
bmi::unordered_unique<bmi::tag<struct ID>, bmi::member<item, int, &item::ID>>,
bmi::unordered_unique<bmi::tag<struct Name>, bmi::member<item, std::string, &item::Name>>
>>;
map_t Map;
/* add some values */
auto idIt = Map.get<ID>().find(1); // lookup by ID
auto nameIt = Map.get<Name>().find("Vaibhav Gupta"); // lookup by Name
相关文章: