我们可以使用boost :: multi_index :: multi_index_container作为多索引映射吗?

时间:2015-03-30 06:12:36

标签: c++ boost multimap boost-multi-index

我正在使用boost :: multi_index :: multi_index_container<>升级库。

我想存储与此容器中存在的每个元素相关的值。

我们可以修改此容器以使用多图,以及它将用作多索引容器吗?

1 个答案:

答案 0 :(得分:1)

当然。

然而,首先看一下Boost Bimap,因为它似乎已经按照你的描述做了:

我举了一个如何使用Boost Multi Index来模拟地图的例子:

相关类型的机器看起来像这样:

namespace emulation {
    template <typename T1,typename T2,typename Alloc>
        struct mutable_pair
        {
            typedef T1 first_type;
            typedef T2 second_type;

            mutable_pair(Alloc alloc):first(T1(alloc)),second(T2(alloc)){}
            mutable_pair(const T1& f,const T2& s):first(f),second(s){}
            mutable_pair(const std::pair<T1,T2>& p):first(p.first),second(p.second){}

            T1         first;
            mutable T2 second;
        };

    using namespace boost::multi_index;

    template <typename Key, typename T, typename Compare, typename Allocator, typename Element = mutable_pair<Key, T, Allocator> >
        using map = multi_index_container<
            Element,
            indexed_by<
                ordered_unique<member<Element,Key,&Element::first>,Compare>
            >,
            typename Allocator::template rebind<Element>::other
        >;

  template <typename Key, typename T, typename Compare, typename Allocator, typename Element = mutable_pair<Key, T, Allocator> >
    using multimap = multi_index_container<
        Element,
        indexed_by<
            ordered_non_unique<member<Element,Key,&Element::first>,Compare>
        >,
        typename Allocator::template rebind<Element>::other
    >;
}

如果您希望该答案包含完整演示,尽管它包含一些不相关的复杂性以便使用共享内存分配器。