W tłumaczeniu mojego eksperymentalnego języka programowania mam tablicę symboli. Każdy symbol składa się z nazwy i wartości (wartością może być np .: ciąg znaków, int, funkcja itd.).C++ STL Mapa kontra prędkość wektorowa
Początkowo reprezentowałem tabelę z wektorem i sprawdzałem przez sprawdzanie symboli, czy podana jest nazwa danego symbolu.
Potem chociaż pomocą mapy, w moim przypadku map<string,symbol>
, byłoby lepsze niż iteracja wektora cały czas ale:
To trochę trudno wyjaśnić tę część, ale spróbuję.
Jeśli zmienna zostanie pobrana po raz pierwszy w programie w moim języku, należy oczywiście znaleźć jej pozycję w tabeli symboli (używając teraz wektora). Gdybym wykonywał iteracje w wektorze za każdym razem, gdy linia zostanie wykonana (myślę o pętli), byłaby to strasznie powolna (jak obecnie jest, prawie tak wolna jak partia Microsoftu).
Więc mogę korzystać z mapy, aby pobrać zmienną: SymbolTable[ myVar.Name ]
Ale pomyśl z następujących czynności: Jeśli zmienna, nadal stosując wektor, znajduje się po raz pierwszy, można przechowywać jego dokładną pozycję całkowitą w wektorze z tym. Oznacza to: Następnym razem, gdy jest to potrzebne, mój interpreter wie, że został "zbuforowany" i nie przeszukuje tabeli symboli, ale robi coś w rodzaju SymbolTable.at(myVar.CachedPosition)
.
Teraz moja (raczej trudne?) Pytanie:
powinienem używać wektor do tablicy symboli wraz z buforowanie położenie zmiennej w wektorze?
Czy powinienem raczej używać mapy? Czemu? Jak szybki jest operator []?
Czy powinienem użyć czegoś zupełnie innego?
Po prostu trochę jedzenia do przemyślenia, jeśli przechowujesz pozycję całkowitą, w której znajduje się twoja zmienna, a niektóre zmienne sprzed zebrania lub usunięcia śmieci, jaki jest twój plan dla tej pamięci podręcznej? – Blindy