Я хочу хранить данные как по имени, так и по индексу. Другими словами, я хочу сопоставить имена string
с объектами, а также задать им пользовательский порядок.
Сначала я придумал std::vector
пар string
ключа и объекта. Порядок задавался положением в векторе.
std::vector<std::pair<std::string, object> >
Но этот подход кажется неоптимальным, поскольку он не проверяет автоматически уникальность string
имен. Более того, кажется неправильным сначала группировать объекты по их порядку, потому что логически их первым порядковым отличием является имя.
Мне нужна структура данных, которая разрешает доступ как по имени, так и по индексу.
std::magic<std::string, unsigned int, object> collection;
// access by either string or unsigned int key
collection.insert("name", 42, new object());
collection["name"]
collection[42]
Существует ли уже структура данных для этого варианта использования? Если нет, то как мне его собрать, предпочтительно используя стандартную библиотеку? Также мне нужен способ вставлять новые элементы в позицию после данного элемента, не перемещая все остальные элементы.
std::map
. - person n. 1.8e9-where's-my-share m.   schedule 06.04.2013std::vector
для порядка иstd::unordered_map
для имен. Но мой вопрос в том, есть ли уже решение или хотя бы предпочтительный способ. - person danijar   schedule 06.04.2013unordered_map
возможно, если вы используете C++11. Для индексов выбор междуvector
иmap
/unordered_map
определяется тем, что должно произойти, когда вы удаляете вещи из своей коллекции. Если вам не нужны стабильные индексы, вы можете использоватьvector
. Я думаю, что два контейнера являются предпочтительным способом. - person n. 1.8e9-where's-my-share m.   schedule 06.04.2013boost::multiindex
, он был сделан именно для этой цели. - person Chad   schedule 06.04.2013