Prawie jak mapa

2008-08-04 17:12

Każda porządna biblioteka pojemników posiada kontener w typie mapy lub słownika, który służy do przechowywania par klucz-wartość, czyli odwzorowywania jednych na drugie. Zwykle pojemnik taki jest zaimplementowany przy pomocy odpowiednio zarządzanej struktury drzewiastej. I tak np. w C++ mamy od tego klasę std::map, w .NET – System.Collections.Generic.Dictionary, a w Javie cały zestaw klas implementujących interfejs java.util.Map.

Czasami jednak korzystanie z tego typu rozwiązań może być strzelaniem z armaty do komara. Jeśli bowiem:

  • nasze klucze nie są typami złożonymi (np. łańcuchami znaków), a raczej wartościami wyliczeniowymi
  • nie jest ich zbyt dużo, zwłaszcza w stosunku do ilości pamięci, którą możemy zająć
  • przypisane kluczom wartości nie są dużymi obiektami
  • istnieją dla nich rozsądne ustawienia domyślne

to możemy zastosować o wiele prostsze rozwiązanie. Polega ono na użyciu typu wyliczeniowego dla kluczy:

  1. enum KEYS { KEY_0, KEY_1, /*... */ KEY_COUNT };

oraz zwykłej tablicy do przechowywania wartości (tutaj typu bool):

  1. bool dictionary[KEY_COUNT];

Proste i skuteczne, a i nieco wygodniejsze składniowo niż standardowe std::map. A także wybitnie mało odkrywcze; podejrzewam, że każdy średnio zaawansowany programista miał okazję zetknąć się z podobną “sztuczką”. Co jednak nie znaczy, że nie warto o niej czasem wspomnieć i zrobić dobry uczynek w postaci propagowania dobrych i sprawdzonych rozwiązań ;-)

Tags: , ,
Author: Xion, posted under Programming »


One comment for post “Prawie jak mapa”.
  1. Reg:
    August 10th, 2008 o 11:35

    Często też szybciej od mapy działa posortowany wektor.

Comments are disabled.
 


© 2019 Karol Kuczmarski "Xion". Layout by Urszulka. Powered by WordPress with QuickLaTeX.com.