[英]C++ map with 2 keys, such that any 1 key can be used to get the value
我有一個用例,在給定密鑰的情況下,我必須從 map 獲取值。 現在鍵可以是 ID(整數)或名稱(字符串)。
我想到了以下結構
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.