Я хочу хранить данные как по названию, так и по индексу. Другими словами, я хочу на карту 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]
Есть ли уже структура данных для этого варианта использования? Если нет, то как я могу собрать один, предпочтительно используя стандартную библиотеку? Кроме того, я хотел бы, чтобы способ вставлять новые элементы в позиции после данного элемента, не перемещая все остальные элементы вокруг.
Boost предоставляет набор контейнеров только для этой цели, смотрите: повышение :: мультииндексных
Других решений пока нет …