Какая структура данных будет лучше для этого? - PullRequest
5 голосов
/ 31 июля 2011

В моей игре, когда объект попадает в датчик, мне нужно добавить его в список, а когда объект покидает датчик, его необходимо удалить из этого списка.Мне также нужно быстро найти этот объект.

По существу:

Мне нужно это сделать: быстрое добавление, быстрое удаление и быстрый поиск.

Что за видструктуры данных будет лучше для этого, учитывая, что в любой момент времени структура будет иметь около 10 объектов.

Спасибо

Ответы [ 4 ]

9 голосов
/ 31 июля 2011

С 10 объектами все будет в порядке (std::vector, deque или set), и никто не может сказать, какой из них работает лучше перед профилированием.

Если вы не знаете, что использовать, возможно, вы обнаружите, что std::set имеет более приятный синтаксис для поиска элементов. Это то, что я использовал бы в этой ситуации, потому что я не хотел бы писать std::find(v.begin(), v.end(), sensor), где я мог бы просто написать s.find(sensor).

Не используйте std::list в качестве общего совета. Вам нужна веская причина для использования связанных списков в C ++ (постоянное время - одно, отсутствие итератора - другое). Другие структуры данных работают лучше для большинства операций (кроме сплайсинга). Здесь я не вижу смысла использовать list, а не например. set.

1 голос
/ 31 июля 2011

Я бы предложил std::list, поскольку он идеально приспособлен для вставки и удаления элементов.

0 голосов
/ 31 июля 2011

Я думаю, что лучше всего использовать связанный список. Учитывая небольшой размер, смещение указателей не повлияет на производительность.

0 голосов
/ 31 июля 2011

Быстрое добавление, быстрое удаление и быстрый поиск, вы не хотите много, не так ли! Учитывая то, что вы сказали, я бы сказал, связанный список, но это также зависит от того, как часто добавляются, удаляются и находят. Если вы находите гораздо чаще, чем добавляете или удаляете вещи, изменитесь.

На самом деле единственный способ - это попробовать несколько разных вариантов и рассчитать их время.

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