Kiedy używać vector a kiedy map?

Kiedy używać vector a kiedy map?
  • Rejestracja: dni
  • Ostatnio: dni
0

Jeżeli mam obiekty np. przeciwników, którzy będą usuwani po zabiciu poprzez erase, to lepiej używać vectora czy map w c++? Słyszałem że jeżeli często usuwamy obiekty to map jest tutaj korzystniejsze.

kaczus
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Łódź
  • Postów: 1403
2

To zależy co będziesz robił i jak. musisz sobie najpierw wypisać wszystkie operacje jakie będziesz chciał wykonać, później zastanowić się jaki koszt jest przy kazdej ze struktur, a dopiero później decydować się na konkretny kontener, bo może się okazać, że w twoim wypadku będzie lepsza lista, albo kolejka. Nie znając szczegółów, ciężko to określić.

  • Rejestracja: dni
  • Ostatnio: dni
0

Są różne typy przeciwników więc dla każdego z osobna inna klasa + wskaźnik Entity. Każda z tych klas posiada metode rysowania i update. Za każdym razem przelatuje przez wszystkie elementy typu przeciwnik, sprawdzam ich kolizję z graczem i pociskami. Jeśli któryś ma HP < 0 to będę usuwał poprzez erase.

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
2

Za każdym razem przelatuje przez wszystkie elementy
Wygląda jakby lista była dobrym kandydatem.

EvilOne
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 78
1
Warmińsko napisał(a):

Słyszałem że jeżeli często usuwamy obiekty to map jest tutaj korzystniejsze.

Porównaj sobie złożoności obliczeniowe poszczególnych operacji kontenerów, które najczęściej będziesz wykonywał. W Twoim przypadku będzie to usuwanie, a nie np. dostęp swobodny, co oferuje vector. Również uważam, że w tym przypadku wystarczy użycie listy i nie ma co udziwniać.

Sopelek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 467
2

Złożoności swoją drogą, wydajność swoją.
http://baptiste-wicht.com/posts/2012/12/cpp-benchmark-vector-list-deque.html

A w kontenerze powinieneś trzymać jedynie wskaźnik.

  • Rejestracja: dni
  • Ostatnio: dni
0

Zamierzam zrobić kontener wskaźników, wczytać z pliku typy przeciwników i potem tworzyć operatorem new dany typ przeciwnika i przypisać go do wskaźnika w kontenerze.

  • Rejestracja: dni
  • Ostatnio: dni
0

w javie vectory są już dawno obsolete, no ale cpp słynie z tego że utrzymuje starodawne konstrukcje!

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
0
Białowieski Żubr napisał(a):

w javie vectory są już dawno obsolete, no ale cpp słynie z tego że utrzymuje starodawne konstrukcje!

W Javie Vector to co innego niż std::vector z STLa. Różnica jest taka, że Vector jest domyślnie synchronizowany, a więc ma potencjalnie słabą wydajność i najlepiej zastąpić go ArrayListą, która nie jest domyślnie synchronizowana.

  • Rejestracja: dni
  • Ostatnio: dni
0
Wibowit napisał(a):
Białowieski Żubr napisał(a):

w javie vectory są już dawno obsolete, no ale cpp słynie z tego że utrzymuje starodawne konstrukcje!

W Javie Vector to co innego niż std::vector z STLa. Różnica jest taka, że Vector jest domyślnie synchronizowany, a więc ma potencjalnie słabą wydajność i najlepiej zastąpić go ArrayListą, która nie jest domyślnie synchronizowana.

święte słowa

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.