Я хочу иметь возможность использовать два типа ключей, чтобы иметь возможность сортировать и искать в наборе данных. Два рассматриваемых типа ключей не обязательно должны быть одного и того же разнообразия, но на практике почти всегда будут таковыми, и именно к этому я стремлюсь.
Для простоты скажем, что я У меня большое количество предметов, и у каждого из них есть имя и идентификатор, которые я им дал, и я хочу хранить их в большом здании. Эти элементы могут находиться в нескольких местах, а не в одном, но каждый из них имеет 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