Я первоначально начал использовать a std::multimap
для хранения многих значений тем же ключом но затем я обнаружил, что он не сохраняет порядок вставки среди значений с тем же ключом. Этот ответ утверждает, что это может быть, покончили boost::multi_index::multi_index_container
, но не дает примера. При просмотре документов нет никаких примеров того использования, и я не могу понять, как Вы, как предполагается, используете эту вещь. Я приехал для ожидания плохой документации из менее используемых библиотек повышения, но это берет пирог. Кто-либо может указать на меня на учебное руководство или пример, который показывает, что использовал способ, которым я хочу или возможно даже обеспечиваю пример самостоятельно?
Этого можно добиться, используя 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;
Как насчет
map<int, vector<string> >
или
map<int, list<string> >
@Kirill: Хороший ответ. Я подозреваю, что random_access Boost может быть довольно медленным, так как он заставит все строки для всех ключей сохраняться в единой непрерывной структуре. В то время как вопрошающий просто хочет, чтобы порядок сохранялся в каждом наборе сопоставленных значений ключа.