Как сделать std::unordered_map, но с двумя ключами? ⇐ C++
-
Anonymous
Как сделать std::unordered_map, но с двумя ключами?
У меня есть список элементов, и каждый элемент имеет UID и индекс в списке. В зависимости от ситуации я могу получить доступ к элементу только через UID или индекс элемента, но не то и другое. Для хранения этих элементов мне нужен тип данных, который может иметь два ключа и вести себя как std::unordered_map. Примерно так: std::multi_unordered_map items;, где оба int являются ключами. Важно то, что для доступа к элементу мне понадобится только один из двух ключей.
Я видел несколько версий «карт с несколькими ключами», но ни одна из них не подошла для моего случая использования.
[*]
Библиотека Tessil великолепна, но она поддерживает только порядок вставки (что было бы нормально, поскольку он всегда будет равен индексу элемента) и не позволяет получить доступ к элементам, использующим ее. р> [*]Ответ на этот вопрос имеет хорошее решение, но для этого требуется знание обоих ключей одновременно, чего у меня не будет. В этой статье GeeksForGeeks описана та же проблема
Существует ли библиотека или принятое (стандартное) решение этой проблемы?
Единственное решение, которое я могу придумать, это что-то вроде этого:
std::unordered_map a; //UID, промежуточное_значение std::unordered_map b; //индекс, промежуточное_значение std::unordered_map элементы; //промежуточное_значение, элемент Затем я могу получить доступ к промежуточному значению, используя соответствующую структуру, а затем использовать промежуточное значение для поиска элемента. Конечно, я уверен, что смогу сделать это намного эффективнее, используя std::vector вместо std::unordered_map, но, тем не менее, это требует множества дополнительных шагов, которые Я бы хотел избежать.
У меня есть список элементов, и каждый элемент имеет UID и индекс в списке. В зависимости от ситуации я могу получить доступ к элементу только через UID или индекс элемента, но не то и другое. Для хранения этих элементов мне нужен тип данных, который может иметь два ключа и вести себя как std::unordered_map. Примерно так: std::multi_unordered_map items;, где оба int являются ключами. Важно то, что для доступа к элементу мне понадобится только один из двух ключей.
Я видел несколько версий «карт с несколькими ключами», но ни одна из них не подошла для моего случая использования.
[*]
Библиотека Tessil великолепна, но она поддерживает только порядок вставки (что было бы нормально, поскольку он всегда будет равен индексу элемента) и не позволяет получить доступ к элементам, использующим ее. р> [*]Ответ на этот вопрос имеет хорошее решение, но для этого требуется знание обоих ключей одновременно, чего у меня не будет. В этой статье GeeksForGeeks описана та же проблема
Существует ли библиотека или принятое (стандартное) решение этой проблемы?
Единственное решение, которое я могу придумать, это что-то вроде этого:
std::unordered_map a; //UID, промежуточное_значение std::unordered_map b; //индекс, промежуточное_значение std::unordered_map элементы; //промежуточное_значение, элемент Затем я могу получить доступ к промежуточному значению, используя соответствующую структуру, а затем использовать промежуточное значение для поиска элемента. Конечно, я уверен, что смогу сделать это намного эффективнее, используя std::vector вместо std::unordered_map, но, тем не менее, это требует множества дополнительных шагов, которые Я бы хотел избежать.
Мобильная версия