Hej, tak jak w tytule. Muszę napisać klasę obsługującą bardzo dużą tablicę na obiekty dowolnego typu(powinna mieć pojemnosć ponad 1 500 000 000). Jednak niezerowych obiektów będzie w niej jedynie kilkaset.
Szukałem w internecie i zazwyczaj trafiam na bardzo duże kody które nie do końca wiem co robią. Postanowiłem więc zacząć ją pisać samemu ale nie wiem czy idę w dobrym kierunku:
Postanowiłem że uzyję mapy do przechowywania niezerowych komórek . Numery indeksu tablicy będą kluczami. Zrobiłem funkcję dodającą elementy do tablicy oraz pobierającą. Jeżeli wcześniej nie został dodany obiekt na danym indeksie to funkcja zwróci nullpointer. Czy to jest dobre rozwiązanie tego zadania czy powinienem to zrobić jakoś zupełnie inaczej? Bo kody z którymi się spotykałem miały po 300+ linijek, co one miały czego nie ma mój?
Chciałem też przeładować operator [] aby zwracał referencję do odpowiedniego obiektu w mapie aby można było korzystać z tej klasy tak jak z normalnej tablicy ale tu mam problem bo zwracając referencję nie widzę w jaki sposob uzytkownik chce z niej korzystać:
Tablica[7]=obiekt1
czy
Tablica[7]
Jeśli chciałbym umożliwić zapis to bym musiał stworzyć nowy wpis w mapie i zainicjować go nowym domyślnym obiektem żeby mógł zostać nadpisany obiektem1.
Jednak jeśli ktoś by chciał tylko odczytać to powyższe rozwiązanie by za każdym razem tworzyło nowy domyślny obiekt
Jak więc najlepiej przeładować operator [] w tej klasie?
To mój kod:
#include <iostream>
#include <map>
template<class T>
class D
{
};
class Tablica
{
private:
unsigned _rozmiar;
std::map<int, T> _mapa;
public:
Tablica()
{
_rozmiar = 3000000000;
}
Tablica(unsigned rozmiar)
{
_rozmiar = rozmiar;
}
T * pobierz(unsigned int indeks)
{
auto it = _mapa.find(indeks);
return (it != _mapa.end()) ? &(it->second) : nullptr;
}
void dodaj(unsigned int indeks, const T& obiekt )
{
_mapa[indeks] = obiekt;
}
};