Opracowałem silnik skryptowy, który ma wiele wbudowanych funkcji, więc aby wywołać dowolną funkcję, mój kod po prostu wszedł w ścianę if .. else if .. else if
sprawdzając nazwę, ale chciałbym opracować bardziej wydajne rozwiązanie .Używanie mapy wskaźników funkcji STL
Czy powinienem używać wartości hashmap z ciągami jako kluczami i wskaźnikami jako wartościami? Jak mogłem to zrobić za pomocą mapy STL?
EDIT: Kolejnym punktem, który przyszedł mi do głowy: oczywiście za pomocą mapy zmusi kompilator nie inline funkcji, ale mój nieefektywne podejście nie mają żadnych narzutów generowane przez konieczność wywołania funkcji, po prostu wykonuje kod.
Więc zastanawiam się, czy narzut generowany przez wywołanie funkcji będzie lepszy niż posiadanie łańcucha if..else
.. w przeciwnym razie mógłbym zminimalizować liczbę porównań, sprawdzając znak w czasie wykonywania (będzie dłuższy, ale szybszy).
Również nie ma potrzeby używania prawdziwej tabeli mieszającej, takiej jak 'unordered_map'. Nie będzie tak wielu elementów, że tabelka mieszająca przyniesie korzyści wydajnościowe, nie zdziwiłbym się nawet, gdyby w tym przypadku "mapa" była szybsza. – sth
Właściwie zrobiłem kilka podobnych rzeczy, a 'unordered_map' było * znacznie * szybsze. Miałem w nim tylko 10 000 rzeczy, a profilowałem zarówno mapy "map" i "unordered_map". – GManNickG
Spodziewałbym się "wielu wbudowanych funkcji" << 10.000'. Hasmap w przypadku OP ma wyraźną przewagę bycia "prawdziwym O (1)", ponieważ nie musi rosnąć, a dla łańcucha można skonstruować hasz bezkolizyjny. Wątpię, aby różnica była * znacząca * w porównaniu z "mapą" nawet na kilka 100 pozycji. – peterchen