Kontener set

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 ?

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

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.

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

Jak dodać do kontenera BaseSet obiekt Derived ?

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 ?

0

to moze po prostu wskazniki przechowuj i te sobie rzutuj?

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.

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1