Witam koleżanki i kolegów.

Noszę się z zamiarem napisania pewnej klasy do przechowywania różnych typów czcionek o nazwie CFontManager.

otóż chcę ją dobrze zaplanować by była maksymalnie wydajna.
W związku z tym zastanawiałem się nad techniką jaką powinienem użyć do tego typu zadania:

Klasa otrzyma parametry czcionki (nazwa (jest tylko niezmienna liczba z gory ustalonych czcionek), kolor (jest pare niezmiennych kolorow ustalonych z gory), bool czy pogrubiona, bool czy kursywa) i ma wyszukac w sobie czy taka czcionka byla juz wczesniej uzywana, jesli nie ma utworzyc nowy rodzaj, dodac go do kontenera (i do innej klasy stosujacej te style) i zwrocic indeks w tej innej klasie.

W zwiazku z tym ze liczba czcionek jest stala i liczba kolorow tez - moj pomysl to aby stworzyc system hashowania tego do liczby np majac 3 czcionki i 3 kolory mozna by przeprowadzac obliczenie indeksu w kontenerze tak:
index = index czcionki * ilosc kolorow * 4, gdzie 4 jest liczba kombinacji styli (zwykly pogrubiony kursywa i pogrubiona kursywa)

Majac ten indeks kontener zwrocilby drugi indeks w innej klasie styli.

Czyli potrzebuje kontenera ktory bedzie mogl przechowac dwie liczby, w ktorych jedna jest unikalnym indeksem i chce by wyszukiwanie bylo bardzo szybkie (np tak jak wyszukiwanie binarne). Najlepiej jesli czcionka przy utworzeniu bylaby Od razu poddawana sortowaniu i pozostawala w odpowiednim miejscu w kontenerze zeby pozniej moglaby byc szybciej odszukana.

Na CFontManager beda przeprowadzane bardzo czeste operacje wyszukiwania tych indeksow, wstawianie czcionek bedzie rzadsze - coraz rzadsze w zaleznosci od tego jak dlugo klasa jest uzywana, gdyz juz raz utworzone elementy pozostaja w kontenerze.

Zastanawialem sie nad uzyciem std::map ale czy on jest sortowany i czy przy pobieraniu wartosci stosowany jest automatycznie jakis sposob na skrocenie wyszukiwania, np szukanie binarne?

Macie jakies pomysly na implementacje takiej klasy by byla maksymalnie wydajna przy wyszukiwaniu?