Сортировка ключей карты - PullRequest
1 голос
/ 03 января 2011

Я строю объектную систему для своего приложения. Теперь у меня есть такой код:

std::map<std::string, Object*> mObjects;

Идея состоит в том, чтобы обновить каждый объект класса Object (вызов update), но в некотором порядке.

В каждом объекте есть член int z_index;. Как я могу отсортировать карту по этому индексу (кстати, индексы могут быть одинаковыми)?

Моей первой идеей было добавление идентификатора в имя ключа, например:

Object *temp = /* ... */
temp->z_index = 5;
temp->name = "test";
mObjects[temp->z_index + temp->name] = temp;

Но с этим кодом я потерял доступ к объектам по имени.

1 Ответ

4 голосов
/ 03 января 2011

Выглядит как идеальный кандидат для мультииндексного контейнера Boost!

Или вы можете сохранить две карты, одну по имени, одну по индексу, обе с указателями на один и тот же объект (кстати, стоит взглянуть на умные указатели - например, shared_ptr!)

Или создайте более сложный ключ (например, struct с именем и индексом, укажите operator<), который может проверять как имя, так и индекс и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...