Карта с несколькими ключами в переполнении стека

Я хочу хранить данные как по названию, так и по индексу. Другими словами, я хочу на карту 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]

Есть ли уже структура данных для этого варианта использования? Если нет, то как я могу собрать один, предпочтительно используя стандартную библиотеку? Кроме того, я хотел бы, чтобы способ вставлять новые элементы в позиции после данного элемента, не перемещая все остальные элементы вокруг.

5

Решение

Boost предоставляет набор контейнеров только для этой цели, смотрите: повышение :: мультииндексных

5

Другие решения

Других решений пока нет …