использование повышения multi_index_container для сохранения порядка вставки

Я первоначально начал использовать a std::multimap для хранения многих значений тем же ключом но затем я обнаружил, что он не сохраняет порядок вставки среди значений с тем же ключом. Этот ответ утверждает, что это может быть, покончили boost::multi_index::multi_index_container, но не дает примера. При просмотре документов нет никаких примеров того использования, и я не могу понять, как Вы, как предполагается, используете эту вещь. Я приехал для ожидания плохой документации из менее используемых библиотек повышения, но это берет пирог. Кто-либо может указать на меня на учебное руководство или пример, который показывает, что использовал способ, которым я хочу или возможно даже обеспечиваю пример самостоятельно?

5
задан Community 23 May 2017 в 12:11
поделиться

2 ответа

Этого можно добиться, используя boost :: multi_index с двумя индексами: orders_non_unique (что позволяет использовать значения с одним и тем же ключом) и random_access (сохранит порядок вставки).

struct some {
  long key;
  int data;
  int more_data;
  // etc.  
};

typedef multi_index_container<
  some, 
  indexed_by<    
    random_access<>,  // keep insertion order
    ordered_non_unique< member<some, long, &some::key> >
  > 
> some_mic_t;
7
ответ дан 14 December 2019 в 13:25
поделиться

Как насчет

map<int, vector<string> >

или

map<int, list<string> >

@Kirill: Хороший ответ. Я подозреваю, что random_access Boost может быть довольно медленным, так как он заставит все строки для всех ключей сохраняться в единой непрерывной структуре. В то время как вопрошающий просто хочет, чтобы порядок сохранялся в каждом наборе сопоставленных значений ключа.

-1
ответ дан 14 December 2019 в 13:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: