我的要求需要这样的地图:
pair<string key1, string key2> _keypair;
map<_keypair, shared_ptr<classX>>
我的需求是:
key1和key2对必须是唯一的。
我应该可以使用key1和Key2对进行访问。
插入。
使用复合键删除
我遇到了boost::multi_index
,但我并不清楚。有人能举例说明我的情况吗?
答案 0 :(得分:1)
struct value_type
{
std::string key1_;
std::string key2_;
std::shared_ptr<some_class> ptr_;
};
// index tags (otherwise you have to use number when get<N>() corresponding index)
struct composite_index;
struct key1_index;
struct key2_index;
using namespace boost::multi_index;
typedef multi_index_container<
value_type
, indexed_by<
ordered_unique<
tag<composite_index>
, composite_key<
value_type
, member<value_type, std::string, &value_type::key1_>
, member<value_type, std::string, &value_type::key2_>
>
>
, ordered_non_unique<
tag<key1_index>
, member<value_type, std::string, &value_type::key1_>
>
>
, ordered_non_unique<
tag<key2_index>
, member<value_type, std::string, &value_type::key2_>
>
>
> index_type;
index_type a;
a.insert({"key-1", "key-2", std::shared_ptr<some_class>(new some_class(...)});
// find by key1_index (or key2_index)
auto range = a.get<key1_index>().equal_range("key-1");
// find by composite index
auto it = a.get<composite_index>().find(std::make_tuple("key-1", "key-2"));
// erase by any iterator type
a.erase(it);