2011-07-31 3 views
5

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

Так по существу:

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

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

Благодаря

+0

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

+0

QuickStruct - это именно то, что именно? – jahhaj

+1

Идеальная структура данных. – unkulunkulu

ответ

9

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

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

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

+0

Хороший совет относительно списков. –

+0

Набор обеспечивает хорошую скорость поиска, но вставка и удаление элементов не так быстро, как списки. Следует учитывать, какая операция чаще выполняется. – neodelphi

+2

@neodelphi: Вывод * где * для вставки или удаления быстрее на наборах, чем в списках. Поэтому я бы не был так категоричен, как ты. Более того, вставка и удаление в векторах из 10 элементов, вероятно, будет намного быстрее, чем в списках (по причинам локальности данных). На самом деле непонятно, какой контейнер лучше работает, но я твердо верю, что 'std :: list' отстает. И это хорошая идея заставить себя использовать списки только там, где это необходимо, поскольку они имеют очень низкую общую производительность. –

0

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

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

0

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

1

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

+1

, но не для поиска. –

+0

Я бы даже не сказал, что это полезно для вставки элементов. Это довольно медленно. – GManNickG

+0

Почему вы говорите, что это медленно? – neodelphi

Смежные вопросы