Я хочу хранить кучу объектов с ключом, но где сам объект значения (и ссылки на него) знает свой ключ. Я также хочу эффективно искать эти объекты, учитывая только ключ.
class SomeObject
{
private:
//String or integer. int seem cheap enough to duplicate with std::map, but
//strings seem pretty expensive when there may be thousands of objects in existence.
//Reference/Pointer to key is fine
const SomeOtherObject key;
...other stuff...
public:
...methods, some of which use the key in some way...
};
- станд:: Карта
- Кажется, требуется, чтобы хранилище было std:: pair, так что значение can not получило доступ к ключу. Если значение содержит ключ, его необходимо дублировать.
- На самом деле не гарантирует, что ключ внутри значения не будет каким-либо образом изменен.
- станд:: набор
- Похоже на действительно хорошее решение, используя специальный метод сравнения, чтобы обеспечить уникальность по ключевому слову, пока вы не осознаете, что это сделало ваше целое значение const, а не только ключевым полем.
- std::vector (или другие решения типа array/list like)
- Может использовать линейный поиск, или если элементы хранятся в сортированном двоичном поиске. Однако я подозреваю, что это не является оптимальным в плане производительности, и необходим дополнительный уровень, необходимый для реального осуществления с ним желаемого поведения.