gpt4 book ai didi

c++ - 如何使用 boost::multi_index 组合键

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:26:39 27 4
gpt4 key购买 nike

我的要求需要这样的 map :

pair<string key1, string key2> _keypair;
map<_keypair, shared_ptr<classX>>

我的需求是:

  1. key1 和 key2 对必须是唯一的。

  2. 我应该能够使用 key1 和 Key2 对进行访问。

  3. 插入。

  4. 使用组合键删除

我遇到了 boost::multi_index 但不是很清楚。谁能举个例子说明我的情况?

最佳答案

像这样(我没有编译这段代码):

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);

关于c++ - 如何使用 boost::multi_index 组合键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18360537/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com