• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kontenery danych, a optymalizacja kodu.

Object Storage Arubacloud
0 głosów
330 wizyt
pytanie zadane 25 maja 2015 w C i C++ przez Adam Knie Mądrala (5,650 p.)
Witam!

Które z rozwiązań byłoby bardziej opłacalne / optymalne?

-> Zastosowanie std::vector i enum jako indeksy

-> Zasotoswanie unordered_map

1 odpowiedź

+1 głos
odpowiedź 25 maja 2015 przez Bartek85 Mądrala (7,440 p.)
edycja 25 maja 2015 przez Bartek85
 
Najlepsza

Zależy do jakich rozwiązań... Co dokładnie chcesz wykonywac na tych kontenerach ?


Charakterystka:

  • std::vector -  pochodzi z grupy kontenerów sekwencyjnych(sequence containers). Należą do nich vector, deque, list, forward_list, array. Poprzez zastosowanie iteratrów, sa praktycznie wymienne między sobą.
    Zalety kontenera typu vector:
    • dynamicznie alokowany na stercie
    • posiada zmienny rozmiar
    • można używać go jak tablicy(elementy w pamięci są zawsze obok siebie)
    • szybki dostęp do każdego elementu
    • szybkie dodawanie/usuwanie na końcu, O(1)
    • wolne w środku i na początku, O(n)
    • wolne przeszukiwanie  O(n)

Tutaj jeszcze mała uwaga, do Twojego pomysłu. Indeksowanie enumem vektora, lub tablicy, może z czasem przynieść opłakane skutki. Jak kiedyś zwiekszysz enuma, a nie zmienisz rozmiarów vektora i tablicy, będziesz sie odwoływał do kawalka pamięci, którego byś nie chciał. Ciężko taki błąd później znaleść.

  • std::unordered_map (implementuja hash_table) - szybkośc działania zależy od zaimplementowaniej funkcji hash'ującej. Dla typów podstawowych standrad posiada szybka implementację. Natomiast dla typów własnych, zdefionowane przez programiste.

Charakterystka:

  • szybkie szukanie elementów, O(1) - wydajnośc może spaść dla słabej funkcji hashującej(hash collision), w najgorszym wypadku zlozoność będzie O(n)
  • szybkie wstawianie O(1) - wydajnośc może spaść dla słabej funkcji hashującej(hash collision), w najgorszym wypadku złożonośc będzie O(n)
  • moze posiadac tylko jeden element o tym samym kluczu. Para <key, value>.

Mam nadzieję, że coś pomogłem. Decyzja należy do Ciebie.

komentarz 25 maja 2015 przez Adam Knie Mądrala (5,650 p.)
W zasadzie mają służyć do przechowywania aktualnej zawartości ekwipunku. Robię konsolówkę by poćwiczyć obiektówkę etc. no i nauczyć się gdzie stosować, i jakie kontenery.
komentarz 25 maja 2015 przez adrian17 Ekspert (344,860 p.)
  • nie posiada operatora []

Chyba pomyliłeś z std::(unordered_)set.

Robię konsolówkę by poćwiczyć obiektówkę etc. no i nauczyć się gdzie stosować, i jakie kontenery.

Jeśli indeksujesz liczbami, to w 99% przypadków najlepszym i najbardziej uniwersalnym rozwiązaniem jest std::vector.

komentarz 25 maja 2015 przez Bartek85 Mądrala (7,440 p.)
  • nie posiada operatora []

Chyba pomyliłeś z std::(unordered_)set.

Prawda, dziekuję (już poprawiam).

komentarz 25 maja 2015 przez Adam Knie Mądrala (5,650 p.)
Dziękuję Wam za pomoc, skorzystam z wektorów.

Pozdrawiam.

Podobne pytania

0 głosów
5 odpowiedzi 418 wizyt
pytanie zadane 28 września 2015 w C i C++ przez C☺ndzi Stary wyjadacz (12,100 p.)
0 głosów
1 odpowiedź 565 wizyt
0 głosów
1 odpowiedź 113 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...