Kontener set

adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 lat
0

Mając przkładowy set<TKlasa>, czy moge przechowywać w nim obiekty klasy pochodenej do klasy TKlasa.

W jaki sposób organizowana jest pamięć w kontenerze set ? Jeśli to lista dwustronna, to elementem listy jest obiekt TKlasa czy wskaźnik do niego ? Gdzie znajdują się wskaźniki następny/poprzedni ?

johny_bravo
  • Rejestracja:około 19 lat
  • Ostatnio:około 13 lat
0
adf88 napisał(a)

Mając przkładowy set<TKlasa>, czy moge przechowywać w nim obiekty klasy pochodenej do klasy TKlasa.

W jaki sposób organizowana jest pamięć w kontenerze set ? Jeśli to lista dwustronna, to elementem listy jest obiekt TKlasa czy wskaźnik do niego ? Gdzie znajdują się wskaźniki następny/poprzedni ?

Mozesz przechowywac w nim pochodne, tylko zczytujac bedziesz musial je rzutowac na wlasciwy typ, jesli chcesz korzystac z jego skladowych i metod.

Trudno powiedziec jak zorganizowana jest pamiec, bo to zalezy od implementacji, ale ja bym stawial na kopiec z tablica haszujaca. Kopiec, bo :

The find() function returns an iterator to key, or an iterator to the end of the set if key is not found.

find() runs in logarithmic time.

O(logn), wiec zapewne jakies drzewko.

pozdrawiam
johny


You need to learn how to walk
before you can run
adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 lat
0
johny_bravo napisał(a)

Mozesz przechowywac w nim pochodne, tylko zczytujac bedziesz musial je rzutowac na wlasciwy typ, jesli chcesz korzystac z jego skladowych i metod.

Kopiuj
class Base {}; 
class Derived: public Base {};
set<Base> BaseSet;
Derived D;

Jak dodać do kontenera BaseSet obiekt Derived ?

Kopiuj
BaseSet.insert(reinterpret_cast<Base&>(D));
  • tak na pewno nie, bo metoda insert wrzuca kopie - wywoływany jest konstruktor kopiujący klasy Base ! i reszta danych (unikatowych dla Derived) jest tracona.

Na pewno można przechowywac pochodne ?

vixen03
  • Rejestracja:ponad 21 lat
  • Ostatnio:prawie 14 lat
  • Postów:475
0

to moze po prostu wskazniki przechowuj i te sobie rzutuj?


06
  • Rejestracja:prawie 20 lat
  • Ostatnio:około rok
  • Postów:2440
0

Jeśli to lista dwustronna [...]

Z tego co zauważyłem to jest to drzewo, a nie lista.

[...] to elementem listy jest obiekt TKlasa czy wskaźnik do niego ?

Jak większość rzeczy w STL'u jest to obiekt.

Gdzie znajdują się wskaźniki następny/poprzedni ?

W STL'u masz iteratory.

Na pewno można przechowywac pochodne ?

Tak jak vixen03 napisał, lepiej będzie użyć wskaźników.

adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 lat
0

Przestudiowałem źródła stl'u i jest już wszystko jasne :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.