Kiedy używać vector a kiedy map?

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.

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ć.

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.

2

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

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ć.

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.

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.

0

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

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.

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1