Deklaracja kontenerow asocjacyjnych przechowujacych statyczne tablice wielowymiarowe
Ostatnio zmodyfikowano 2013-08-04 17:32
Mr.J Temat założony przez niniejszego użytkownika |
Deklaracja kontenerow asocjacyjnych przechowujacych statyczne tablice wielowymiarowe » 2013-08-04 16:33:23 Witam, zadałem jakiś czas temu podobne pytanie, ale wtedy jeszcze sam nie wiedziałem co chce zrobić, napisałem to źle i temat poszedł do śmietnika.
Piszę grę 2D(jest to dla mnie forma nauki, która stwarzając mi pewne problemy motywuje mnie do dalszej nauki, więc proszę nie pisać postów w stylu "zabierasz się za pisanie gry, a nie wiesz takich rzeczy!", gdyż na tym polega sytuacja przed, która się postawiłem :)) ,która ma stwarzać iluzje posiadania wielu poziomów w gorę/dół i jednocześnie muszę mieć kontrolę który jej poziom jest wczytywany w danym momencie. Zrobiłem to wszystko swoim sposobem i działa, ale teraz chcę to napisać w inny sposób:
Chce wstawiać np. poziom -2 w całości do kontenera "map" z kluczem -2 i tu pojawia się moje pytanie, w jaki sposób zadeklarować taki kontener aby przyjmował całą tablice dwuwymiarową? Czy w miejscu rodzaju zmiennych jakie przechowuje muszę napisać tylko "Tile[][]" czy konieczne jest tez wpisanie ilości przechowywanych kafelkow przez taka tablice czyli np. "Tile[32][32]" ?
Oraz drugie pytanie czy modyfikacja takiej tablicy wewnątrz kontenera wiąże się z przekopiowaniem starej, usunięciem jej, modyfikacja kopii, po czym wklejeniu kopii do kontenera, czy program po prostu modyfikuje taka tablicę wewnątrz kontenera? |
|
Monika90 |
» 2013-08-04 17:04:38 Jeżeli klucze są liczbami, które należa do "ciągłego" przedziału np. wszystkie liczby od -10 do +100, to zamiast map lepiej jest użyć tablicy lub std::vectora.
Tablice wbudowane nie mogą być elementami standardowych kontenerów, bo są niekopiowalne. Ale std::array<T, N> może być. Jednek jeśli te tablice mają mieć różne rozmiary, to std::array odpada, bo rozmiar jest cześcią jej typu.
|
|
Mr.J Temat założony przez niniejszego użytkownika |
» 2013-08-04 17:32:49 Po pierwsze dziękuje za odpowiedź. Po drugie znalazłem już, że można zadeklarować kontener map tablica dwuwymiarowa typu array[y][x] z tym ze deklaracja musi wygladac tak: map<KEY, Tile(*)[y][x]> no i oczywiście "y" oraz "x" muszą być stałymi, z tym ze w moim przypadku jednak operowanie na kafelkach w takim kontenerze jest bardzo mało wydajne... Rozmiar tablic byłby stały dla każdego klucza, i przyznam szczerze że nigdy nie miałem do czynienia z std::array, zaraz sprawdzę jak to wygląda, ale już widzę że najlepsze rozwiązanie to tablica statyczna typu Tile[z][y][x] (czyli moje pierwsze rozwiązanie), tak naprawdę chciałem pokombinować z map z uwagi na ujemne poziomy (indeks nie może być ujemny), ale zrobię to trochę inaczej...
Dziękuje za pomoc i pozdrawiam, Mr.J |
|
« 1 » |