2015-03-30 6 views
1

Я использую boost :: multi_index :: multi_index_container <> библиотеки boost.Можем ли мы использовать boost :: multi_index :: multi_index_container как многоиндексную карту?

Я хочу сохранить значения, относящиеся к каждому элементу, присутствующему в этом контейнере.

Можем ли мы изменить этот контейнер для использования мультимапа, а также его использовать в качестве контейнера с несколькими индексами?

ответ

1

Конечно.

Однако первый взгляд на Boost, Bimap, как это кажется уже делать то, что вы описали:

I приведен пример использования 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 
    >; 
} 

В случае, если вы хотите, чтобы ответ содержит полный демо, хотя он содержит несвязанный сложности с тем, чтобы использовать общую память распределители.

+0

Благодарим вас за описательный и полезный ответ. Однако я застрял в эмуляции картографического ассоциативного контейнера. Я попытался эмулировать карту, которая содержит ключ и значение как «set <>» boost: shared_ptr <>. – BSalunke

+0

@Balunke, возможно, вы должны опубликовать еще один вопрос, показывающий SSCCE, где вы застряли – sehe

Смежные вопросы