Каков эффективный способ хранения элементов таким образом, чтобы их можно было индексировать по строке и числу?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Каков эффективный способ хранения элементов таким образом, чтобы их можно было индексировать по строке и числу?

Сообщение Anonymous »

Я уже некоторое время размышляю над этой проблемой и не нашел ее решения с пустыми руками. Я пытаюсь использовать для этого C++, потому что это язык, который я знаю больше всего и с которым мне удобнее всего.
Я хочу иметь возможность использовать два типа ключей, чтобы иметь возможность сортировать и искать в наборе данных. Два рассматриваемых типа ключей не обязательно должны быть одного и того же разнообразия, но на практике почти всегда будут таковыми, и именно к этому я стремлюсь.
Для простоты скажем, что я У меня большое количество предметов, и у каждого из них есть имя и идентификатор, которые я им дал, и я хочу хранить их в большом здании. Эти элементы могут находиться в нескольких местах, а не в одном, но каждый из них имеет std::string для имени и беззнаковое целое число для идентификатора.
Я хочу иметь возможность хранить эти элементы таким образом, чтобы свести к минимуму дополнительное использование памяти и обеспечить возможность поиска по данным за нелинейное время поиска.
Первое, что приходит на ум, — это используйте std::map или std::unordered_map. Идея заключалась бы в том, чтобы иметь две отдельные карты: одну для имен и одну для идентификаторов, и чтобы элементы указывали друг на друга. Затем отдельная третья карта, на которой будут указаны фактические местоположения с идентификаторами в качестве ключа.
Что-то вроде:

Код: Выделить всё

std::map namesToIDs;
std::map IDsToNames;

std::map items;

const std::string& getLocation(const std::string& name);

const std::string& getLocation(std::uint32_t id);
Основная проблема заключается в том, что если одна из карт имен или идентификаторов будет перераспределена, другая будет указывать на недопустимые местоположения, и у меня не будет возможности узнать, когда это произойдет. .
У меня были и другие идеи, но они не увенчались успехом.
Есть ли какой-нибудь лучший способ организовать эти данные в способ, который требует минимального использования оперативной памяти и может быть найден за РАЗУМНУЮ временную сложность?

Подробнее здесь: https://stackoverflow.com/questions/790 ... dexed-by-a
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»