Składnia
#include <boost/ptr_container/ptr_map.hpp>
namespace boost
{
template
<
class Key,
class T,
class Compare = std::less < Key >,
class CloneAllocator = heap_clone_allocator,
class Allocator = std::allocator < std::pair < const Key, void *> >
>
class ptr_map
: public ptr_map_adapter < T, std::map < Key, void *, Compare, Allocator >, CloneAllocator >
{
};
}
Opis szczegółowy
Kontener
ptr_map reprezentuje zrównoważoną mapę powiązań klucz-wartość
bez powtórzeń, którego wartości są wskaźniki danego typu. Kontener
ptr_map jest odpowiednikiem kontenera
std::map. Istotną różnicą między kontenerami jest fakt, że kontener
ptr_map przyjmuje jako wartości wskaźniki na obiekty, zamiast obiektów. Obiekty dodane do kontenera są zwalniane za pomocą operatora
delete
. Jeżeli element nie może zostać dodany do kontenera to zajmowana przez niego pamięć zostanie zwolniona automatycznie.
Dodatkowe informacje
Pomimo, iż ideologia dla kontenera
ptr_map pozostała taka sama jak dla kontenera
std::map to interfejs do jego obsługi został zmieniony.
Przykład
#include <boost/ptr_container/ptr_map.hpp>
#include <cstdio>
#include <string>
class CLiczba
{
public:
CLiczba( int iLiczba )
: m_iLiczba( iLiczba )
{ printf( "CLiczba(%d)\n", iLiczba ); }
~CLiczba() { printf( "~CLiczba()//m_iLiczba = %d\n", m_iLiczba ); }
operator int() const { return m_iLiczba; };
private:
int m_iLiczba;
};
typedef CLiczba TypeT;
typedef boost::ptr_map < std::string, TypeT > ContainerT;
void wypisz( const ContainerT & v )
{
printf( "Elementy kontenera (rozmiar = %d):\n", v.size() );
for( ContainerT::const_iterator i = v.begin(); i != v.end(); i++ )
printf( "\t%s = %d (0x%x)\n", i->first.c_str(), * i->second, &* i->second );
printf( "\n" );
}
int main()
{
ContainerT kontener;
kontener.insert( std::string( "jeden" ), new TypeT( 123 ) );
kontener.insert( std::string( "dwa" ), new TypeT( 345 ) );
kontener.insert( std::string( "trzy" ), new TypeT( 123 ) );
kontener.insert( std::string( "dwa" ), new TypeT( 555 ) );
wypisz( kontener );
kontener.clear();
kontener.insert( std::string( "cztery" ), new TypeT( 777 ) );
wypisz( kontener );
return 0;
}
Standardowe wyjście programu:
CLiczba(123)
CLiczba(345)
CLiczba(123)
CLiczba(555)
~CLiczba()//m_iLiczba = 555
Elementy kontenera (rozmiar = 3):
dwa = 345 (0x339b0)
jeden = 123 (0x35ec0)
trzy = 123 (0x35f50)
~CLiczba()//m_iLiczba = 345
~CLiczba()//m_iLiczba = 123
~CLiczba()//m_iLiczba = 123
CLiczba(777)
Elementy kontenera (rozmiar = 1):
cztery = 777 (0x33950)
~CLiczba()//m_iLiczba = 777
Zagadnienia powiązane
ptr_multimap | Kontener reprezentujący zrównoważoną mapę powiązań klucz-wartość z powtórzeniami, którego wartości są wskaźniki danego typu. (szablon klasy) |
---|
Linki zewnętrzne
Wszystkie teksty są chronione prawami autorskimi. Kopiowanie lub rozpowszechnianie treści poza niniejszym serwisem
jest zabronione.
Powyższe ograniczenie nie dotyczy autora opracowania, któremu przysługuje prawo do rozpowszechniania własnego tekstu wedle własnego uznania.