Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Opracował: Piotr DejaVu Szawdyński
Biblioteki C/C++

ptr_map

[szablon klasy] Kontener reprezentujący zrównoważoną mapę powiązań klucz-wartość bez powtórzeń, którego wartości są wskaźniki danego typu.

Składnia

C/C++
#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

C/C++
#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_multimapKontener 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