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.
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ć.
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.
Za każdym razem przelatuje przez wszystkie elementy
Wygląda jakby lista była dobrym kandydatem.
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ć.
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.
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.
w javie vectory są już dawno obsolete, no ale cpp słynie z tego że utrzymuje starodawne konstrukcje!
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.
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