Você está na página 1de 16

Universidade Federal de Itajub UNIFEI

Engenharia de Computao / Cincia da Computao Maratona de Programao Prof. Edmilson Marmo Moreira

Standard Library Template S !


E no vos conformeis com este mundo, mas transformai-vos pela renovao do vosso entendimento, para que experimenteis qual seja a boa, agradvel e perfeita vontade de Deus. Paulo (Romanos, 12:2).

" Introduo
# Standard Template Library$ ou S !$ % uma bibliote&a '(( de &lasses containers$ algoritmos e iteradores e )rov* diversos algoritmos bsi&os e estrutura de dados da 'i*n&ia da 'om)utao. # S ! % uma bibliote&a gen%ri&a$ ou seja$ seus &om)onentes so altamente )arametri+ados, -uase todos os &om)onentes da S ! so templates. # S ! in&lui &lasses containers$ ou seja$ &lasses &ujo )ro).sito % agru)ar outros objetos. # S ! in&lui as &lasses, vector, list, deque, set, multiset, map, multimap, hash_set, hash_multiset, hash_map, e hash_multimap. 'ada uma destas &lasses % um template e )ode ser instan&iada &ontendo -ual-uer ti)o de objeto. Pode/se$ )or e0em)lo$ usar um vector<int> de uma maneira semel1ante &omo se usaria um array em '$ e0&eto -ue vector elimina o ne&essidade de fa+er manualmente o geren&iamento din2mi&o da mem.ria.

E0em)lo,
vector<int> v(3); V[0] = 7; v[1] = v[0] + 3; v[2] = v[0] + v[1]; // Declare a vector of 3 elements.

// v[0] == 7, v[1] == 10, v[2] == 17

# S ! tamb%m in&lui uma grande &oleo de algoritmos -ue mani)ulam os dados arma+enados nos containers. Pode/se$ )or e0em)lo$ inverter a ordem dos elementos em um ve&tor usando o algoritmo reverse.

!aratona de "rogramao # $otas de %ula - 2

E0em)lo,
reverse(v.begin(), v.end()); // v[0] == 17,v[1] == 10,v[2] == 7

E0istem dois )ontos a serem desta&ados a res)eito de reverse. Primeiro$ ele % uma funo global$ no uma funo membro. Segundo$ ela )ossui dois argumentos$ o)erando em uma fai0a de elementos -ue esto em um container. # ra+o )ara estes dois fatos % o mesmo, reverse, &omo outros algoritmos S !$ esto se)arados das &lasses containers, ou seja$ al%m de vectors$ eles )odem ser usados em listas e vetores '.

E0em)lo,
double A[6] = { 1.2, 1.3, 1.4, 1.5, 1.6, 1.7 }; reverse(A, A + 6); for (int i = 0; i < 6; ++i) cout << "A[" << i << "] = " << A[i];

3 Iteradores
No e0em)lo da reverso do vetor em '$ os argumentos )ara a funo reverse$ foram &laramente do ti)o double*. Quais so os argumentos )ara esta funo se for usado um vector ou um list4 Em outras )alavras$ -ual % o ti)o dos )ar2metros em reverse4 # res)osta %, os argumentos so iteradores. Iteradores so a generali+ao de )onteiros. No e0em)lo a&ima$ o ti)o retornado )or v.begin() e v.end() % vector<int>::iterator. E0istem iteradores asso&iados 5 containers e outros -ue no so asso&iados$ tais &omo istream_iterator e ostream_iterator. 6s iteradores so os me&anismos -ue tornam )oss7vel se)arar os algoritmos dos containers, algoritmos so templates e so )arametri+ados )elo ti)o do iterador. # seguir$ um )rograma -ue e0e&uta uma bus&a linear em um &onjunto de elementos. # S ! )ossui o algoritmo find.

!aratona de "rogramao # $otas de %ula - 3

E0em)lo,
template <class InputIterator, class T> InputIterator find (InputIterator first, InputIterator last, const T& value) { while (first != last && *first != value) ++first; return first; }

find re&ebe 8 argumentos, 3 iteradores -ue definem o intervalo e o valor -ue dever ser en&ontrado. Ele e0amina &ada iterador na fai0a [first, last)$ do in7&io at% o fim e )ara se en&ontrar um elemento -ue % igual a valor$ ou -uando al&ana o fim do intervalo. first e last so de&larados do ti)o InputIterator e InputIterator um parmetro template. 9uando % feito uma &1amada a find$ o &om)ilador substitui os ti)os dos argumentos )elo ti)o da &1amada. Se o )rimeiro argumento. Um iterador no % um )onteiro$ mas )ode ser utili+ado &omo um )onteiro. 'omo uma varivel )onteiro$ uma varivel iterador est lo&ali+ada em uma entrada de dados no container 6s iteradores so mani)ulados )or meio dos seguintes o)eradores sobre&arregados$ -ue se a)li&am a objetos iterador,

6)eradores de in&remento )r%/fi0ados e ).s/fi0ados :((; )ara avanar o iterador )ara o )r.0imo item dado. 6)eradores de de&remento )r%/fi0ados e ).s/fi0ados ://; )ara mover o iterador )ara o item dado anteriormente. 6)eradores de igualdade e desigualdade :<< e =<; )ara testar se dois iteradores a)ontam )ara a mesma )osio de dados. Um o)erador de desreferen&iao :>;$ de modo -ue$ se p for uma varivel iterador$ ento *p d a&esso aos dados lo&ali+ados em :a)ontados )or; p. Esse a&esso )ode ser a)enas de leitura$ a)enas de es&rita ou tanto de leitura -uanto de alterao dos dados$ de)endendo da &lasse container )arti&ular.

!aratona de "rogramao # $otas de %ula - !

Nem todos os iteradores )ossuem todos esses o)eradores. Entretanto$ a &lasse tem)late vector % um e0em)lo de um container &ujos iteradores )ossuem todos esses o)eradores$ al%m de outros. Uma &lasse container )ossui fun?es/membros -ue desen&adeiam o )ro&essamento do iterador. Muitas &lasses containers, in&lusive a &lasse vector$ )ossuem as seguintes fun?es/membro -ue retornam objetos iteradores,

c.begin() retorna um iterador )ara o container c -ue a)onta )ara o @)rimeiroA dado no container c. c.end() retorna algo -ue )ode ser utili+ado )ara testar -uando um iterador ultra)assou o Bltimo item dado em um &onteiner c. Este iterador % anlogo a NULL -uando utili+ado )ara testar se um )onteiro ultra)assou o Bltimo n. em uma lista ligada. 6 iterador c.end() %$ ento$ um iterador -ue no estlo&ali+ado em um item dado$ mas -ue % uma es)%&ie de sentinela.

Para muitas &lasses containers, essas ferramentas )ermitem -ue se es&revam iterra?es for -ue )er&orrem em &i&los todos os elementos em um objeto container c$ &omo no e0em)lo abai0o,

E0em)lo,
// p uma varivel iterador do tipo para o objeto c. for (p = c.begin(); p != c.end(); p++) processe *p;

6 )r.0imo e0em)lo ilustra o uso de iteradores &om a &lasse vector.

E0em)lo,
#include <iostream> #include <vector> using namespace std; int main() { vector<int> container; vector<int>::iterator p;

!aratona de "rogramao # $otas de %ula - "

for (int i=1; i<=4; i++) container.push_back(i); cout << Eis o que est no container:\n; for (p = container.begin(); p != container.end(); p++) cout << *p << ; cout << endl; cout << Limpando todos os elementos:\n; for (p = container.begin(); p != container.end(); p++) *p = 0; cout << endl; cout << O container agora contm:\n; for (p = container.begin(); p != container.end(); p++) cout << *p << ; cout << endl; return 0;

C 6utra &lasse container % &lasse list. Iteradores )ara listas de inteiros so do ti)o, std::list<int>::iterator 2 # Categorias de $teradores Containers diferentes a)resentam &ategorias diferentes de iteradores. 6s iteradores so &lassifi&ados de a&ordo &om as es)%&ies de o)era?es -ue atuam sobre eles. Iteradores vectors so da forma mais geralD ou seja$ todas as o)era?es fun&ionam &om estes ti)os de iteradores. 6 e0em)lo a seguir ilustra a utili+ao de outras o)era?es &om iteradores.

E0em)lo,
#include <iostream> #include <vector> using namespace std;

!aratona de "rogramao # $otas de %ula - %

int main() { vector<char> container; container.push_back('a'); container.push_back('b'); container.push_back('c'); container.push_back('d'); for (int i=0; i<4; i++) cout << "container[" << i << "] == " << container[i] << endl; vector<char>::iterator p = container.begin(); cout << "O terceiro elemento " << container[2] << endl; cout << "O terceiro elemento " << p[2] << endl; cout << "O terceiro elemento " << *(p + 2) << endl; p = container.begin(); cout << "Um passo para frente" << endl; p++; cout << *p << endl; cout << "Mais um passo para frente" << endl; p++; cout << *p << endl; cout << "Um passo para trs" << endl; p--; cout << *p << endl; return 0; }

6s o)eradores de in&remento e de&remento )odem ser usados em notao de )refi0o ou sufi0o. Este e0em)lo ilustra as )rin&i)ais &ategorias de iteradores,

$teradores de a&ano, (( atuam sobre o iterador. $teradores bidirecionais' anto (( -uanto atuam sobre o iterador. $teradores de acesso aleat(rio' (($ // e a&esso aleat.rio fun&ionam &om o iterador.

!aratona de "rogramao # $otas de %ula - )

#&esso aleat.rio signifi&a -ue se )ode ir diretamente a -ual-uer elemento )arti&ular em um s. )asso. E &ategorias &ada ve+ mais fortes, todo iterador de a&esso aleat.rio % tamb%m um iterador bidire&ional$ e todo iterador bidire&ional % tamb%m um iterador de avano. 2 2 $teradores constantes e mut*&eis 'ada uma das &ategorias iterador de avano$ iterador bidire&ional e iterador de a&esso aleat.rio se subdivide em duas &ategorias &onstantes e mutveis /$ de)endendo de &omo o o)erador de desreferen&iao se &om)orta &om o iterador. 'om um iterador &onstante o o)erador de desreferen&iao )rodu+ uma verso somente de leitura do elemento$ ou seja$ iterador &onstante -ue no )ermite alterar o elemento em sua )osio. 2 3 $teradores re&ersos #s ve+es % )re&iso )er&orrer os elementos de um container em ordem inversa. 6 &.digo do e0em)lo a seguir tem um )e-ueno in&onveniente.

E0em)lo,
iterador p; for (p = container.end(); p != container.begin(); p--) cout << *p << ;

Esse &.digo &om)ilar$ e talve+ fun&ione em alguns sistemas$ mas 1 algo fundamentalmente errado &om ele, container.end() no % um iterador normal$ a)enas uma sentinela$ e container.begin() no % uma sentinela. Para containers &om iteradores bidire&ionais$ e0iste uma forma de invertar tudo utili+ando um iterador reverso. 6 )r.0imo e0em)lo fun&ionar bem.

E0em)lo,
reverse_iterator rp; for (rp = container.rbegin(); rp != container.rend(); rp++) cout << *p << ;

!aratona de "rogramao # $otas de %ula - +

# funo/membro rbegin() retorna um iterador lo&ali+ado no Bltimo elemento. # funo/membro rend() retorna uma sentinela -ue assinala o @fimA dos elementos na ordem inversa. 6bserve -ue$ )ara um iterador de ti)o reverse_iterator$ o o)erador de in&remento se move )ara trs atrav%s dos elementos. 2 ! ,utras categorias de iteradores E0istem outras &ategorias de iteradores. Um iterador de entrada % essen&ialmente um iterador de avano -ue )ode ser usado )ara a entrada de stream. Um iterador de sa7da % essen&ialmente um iterador de avano -ue )ode ser usado )ara a sa7da de streams.

8 Containers
#s &lasses containers da S ! so &ategorias diferentes de estruturas )ara guardar dados$ &omo listas$ filas e )il1as. 3 # Containers se-.enciais Um container se-Fen&ial dis)?e seus itens dados em uma lista de modo -ue 1aja um )rimeiro elemento$ um )r.0imo$ e assim )or diante$ at% o Bltimo elemento. #s listas ligadas so e0em)los de um ti)o de container se-Fen&ial. # S ! no tem container -ue &orres)onda a uma lista ligada sim)les. # lista mais sim)les -ue fa+ )arte da S ! % a lista du)lamente en&adeada$ -ue % a &lasse tem)late denominada list. # seguir % a)resentado um e0em)lo sim)les -ue utili+a a &lasse list da S !. # funo push_back() a&res&enta um elemento ao final da lista.

E0em)lo,
#include <iostream> #include <list> using namespace std; int main() { list<int> listObj;

!aratona de "rogramao # $otas de %ula - /

for (int i=1; i<=3; i++) listObj.push_back(i); cout << "A lista contm:" << endl; list<int>::iterator iter; for (iter = listObj.begin(); iter != listObj.end(); iter++) cout << *iter << " "; cout << endl; cout << "Zerando todos os elementos:" << endl; for (iter = listObj.begin(); iter != listOb.end(); iter++) *iter = 0; cout << "A lista agora contm:" << endl; for (iter = listObj.begin(); iter != listObj.end(); iter++) cout << *iter << " "; cout << endl; return 0; }

Este )rograma fun&ionaria da mesma forma se fosse subsitu7do list e list<int> )or vector e vector<int>$ res)e&tivamente. Essa uniformidade de uso % uma )arte/&1ava da sinta0e da S !. E0istem$ entretanto$ diferenas entre um container vector e um container list. Uma das )rin&i)ais diferen&as % -ue um container vector )ossui iteradores de a&esso aleat.rio$ en-uanto uma lista tem a)enas iteradores bidire&ionais. #s &lasses templates containers se-Fen&iais bsi&as da S ! esto a)resentadas na tabela a seguir,
Nome da Nomes de ti)os 'lasse Template Iteradores
slist list slist<T>::iterator slist<T>::const_iterator list<T>::iterator list<T>::const_iterator list<T>::reverse_iterator list<T>::const_reverse_iterator vector<T>::iterator vector<T>::const_iterator vector<T>::reverse_iterator vector<T>::const_reverse_iterator

'ategorias de Iteradores
Mutvel )ara a frente 'onstante )ara a frente Mutvel bidire&ional 'onstante bidire&ional Mutvel bidire&ional 'onstante bidire&ional Mutvel a&esso aleat.rio 'onstante a&esso aleat.rio Mutvel a&esso aleat.rio 'onstante a&esso aleat.rio

#r-uivo &abeal1o
<slist> <list>

vector

!aratona de "rogramao # $otas de %ula - #0


deque vector<T>::iterator vector<T>::const_iterator vector<T>::reverse_iterator vector<T>::const_reverse_iterator <deque> Mutvel a&esso aleat.rio 'onstante a&esso aleat.rio Mutvel a&esso aleat.rio 'onstante a&esso aleat.rio

# )r.0ima tabela a)resenta algumas fun?es/membros das &lasses containers se-Fen&iais


Funo/membro :& % um objeto container1
c.size() c.begin() c.end() c.rbegin() c.rend() c.push_back(elemento) c.push_front(elemento) c.insert(Iterador, elemento) c.erase(Iterador)

Signifi&ado
Forne&e o nBmero de elementos no container Forne&e um iterador lo&ali+ado no )rimeiro elemento no container Forne&e um iterador lo&ali+ado um elemento a).s o Bltimo no container Forne&e um iterador lo&ali+ado no Bltimo elemento no container Utili+ado &om reverse_iterator. No % membro de slist. Forne&e um iterador lo&ali+ado antes do )rimeiro elemento no container Utili+ado &om reverse_iterator. No % membro de slist. Insere o elemento ao final da se-F*n&ia. No % membro de slist. Insere o elemento no in7&io da se-F*n&ia. No % membro de vector. Insere uma &.)ia de elemento antes do $terador Gemove o elemento lo&ali+ado em $terador Forne&e um iterador na )osio imediatamente seguinte. Forne&e c.end() se o Bltimo elemento for removido. Uma funo void -ue remove todos os elementos do container Forne&e uma refer*n&ia )ara o elemento no in7&io da se-H*n&ia. Ierdadeiro se c1.size() == c2.size() e todo elemento de c1 for igual ao elemento &orres)ondente de c2. !(c1 == c2)

c.clear() c.front() c1 == c2 c1 != c2

odos os containers se-Fen&iais dis&utidos a-ui )ossuem tamb%m um &onstrutor/)adro$ um &onstrutor de &.)ia e vrios outros &onstrutores )ara ini&iali+ar o container &omo )adro ou &om elementos es)e&ifi&ados. odos )ossuem tamb%m um destrutor -ue devolve todo o es)ao de arma+enamento )ara re&i&lagem e um o)erador de atribuio bem/ &om)ortado.

!aratona de "rogramao # $otas de %ula - ##

3 2 2daptadores de containers #da)tadores de containers so &lasses templates im)lementadas sobre outras &lasses. Por e0em)lo$ a &lasse template stack %$ se nada for alterado na &onfigurao original$ im)lementada em &ima da &lasse template deque$ ou seja$ sob a im)lementao de uma )il1a$ 1 um de-ue em -ue residem todos os dados. 6utras &lasses ada)tadoras de container so as &lasses templates queue :fila; e priority_queue :fila &om )rioridade;. Uma fila &om )rioridade % a-uela &om a )ro)riedade adi&ional de -ue &ada entrada re&ebe uma )rioridade -uando % a&res&entada 5 fila. Se todas as entradas tiverem as mesmas )rioridades$ as entradas so removidas da mesma forma -ue uma fila sim)les. Se os itens t*m )rioridades diferentes$ os itens de )rioridade mais elevada so removidos antes dos itens de )rioridade mais bai0a. Embora uma &lasse template ada)tadora ten1a uma &lasse container )adro sobre a -ual % &onstru7da$ )ode/se es&ol1er um container diferente )ara a base$ )or ra+?es de efi&i*n&ia ou outras$ de)endendo da a)li&ao. Por e0em)lo$ -ual-uer container se-Fen&ial )ode servir &omo container de base )ara a &lasse template stack$ e -ual-uer container se-.encial -ue no seja o vector$ )ode servir &omo container de base )ara a &lasse template queue. # estrutura de dados )adro de base % deque tanto )ara stack -uanto )ara queue. Para uma priority_queue$ o container )adro de base % um vector. Por e0em)lo$ o nome do ti)o )ara uma &lasse template stack -ue utili+a o container )adro de base % stack<int> )ara uma )il1a de ints. Se se deseja es)e&ifi&ar -ue o container de base %$ em ve+ disso$ a &lasse template vector$ usa/se stack<int, vector<int> > &omo o nome de ti)o. # tabela a seguir a)resenta algumas das fun?es membros da &lasse template stack,

!aratona de "rogramao # $otas de %ula - #2

Funo/membro :s % um objeto stack1


s.size() s.empty() s.top() s.push(elemento) s.pop() s1 == s2 s1 != s2

Signifi&ado
Forne&e o nBmero de elementos na )il1a Forne&e true se a )il1a estiver va+iaD &aso &ontrrio$ 3alse Forne&e uma refer*n&ia mutvel )ara o membro do to)o da )il1a Insere uma &.)ia de elemento no to)o da )il1a. Gemove o elemento do to)o da )il1a. 6bserve -ue % uma funo void. No a)resenta na sa7da o elemento removido. Ierdadeiro se s1.size() == s2.size() e todo elemento de s1 for igual ao elemento &orres)ondente de s2. !(s1 == s2)

6 )r.0imo e0em)lo ilustra a utili+ao da &lasse deque da S !.

E0em)lo,
#include <iostream> #include <deque> using namespace std; int main() { deque<double> values; values.push_front(2.2); values.push_front(3.5); values.push_front(1.1); cout << "values contm: "; for (int i=0; i < values.size(); ++i) cout << values[i] << " "; values.pop_front(); cout << endl << "Aps pop_front values contm: "; for (int i=0; i < values.size(); ++i) cout << values[i] << " "; values[1] = 5.4; cout << endl << "Aps values[1] = 5.4 values contm: "; for (int i=0; i < values.size(); ++i) cout << values[i] << " "; cout << endl;

!aratona de "rogramao # $otas de %ula - #3

return 0; }

3 3 Containers associati&os set e map Containers associati&os so bases de dados muito sim)les. Eles arma+enam dados$ &omo structs ou -ual-uer outro ti)o de dados. 'ada item dado )ossui um valor asso&iado &on1e&ido &omo sua &1ave. # &lasse template set % o container mais sim)les. Ela arma+ena elementos sem re)etio. # )rimeira insero &olo&a um elemento no &onjunto :set;. #s inser?es adi&ionais do mesmo elemento no t*m efeito. 'ada elemento % sua )r.)ria &1ave. Jasi&amente$ a)enas so a&res&entados ou eliminados elementos e )ode/se )erguntar se um determinado elemento fa+ )arte do &onjunto. Para fun&ionar &om efi&i*n&ia$ um objeto set arma+ena seus valores em ordem. Pode/se es)e&ifi&ar a ordem utili+ada )ara arma+enar os elementos da seguinte forma, set<T, Ordem> s; ,rdem deve ser uma relao de ordem bem/&om)ortada -ue re-uer dois argumentos de ti)o T e retorna um valor bool. Se nen1uma ordem for es)e&ifi&ada$ )resume/se -ue se utili+e o o)erador rela&ional <. # ordem deve ser uma ordem estrita fra&a. Esta % a ordem utili+ada )ara im)lementar o o)erador <. Uma ordem estrita fra&a deve ser,

Irrefle0iva, ordem (x, x) % sem)re falsaD #nti/sim%tri&a, ordem (x, y) im)li&a !ordem(y, x); ransitiva, ordem (x, y) e ordem (y, z) im)li&a ordem(x, z); ransitividade de e-uival*n&ia, se x % e-uivalente a y e y % e-uivalente a z, ento x % e-uivalente a z Kois elementos x e y so e-uivalentes se ordem (x, y) e ordem (y, z) forem sem)re false.

!aratona de "rogramao # $otas de %ula - #!

# tabela a seguir a)resenta algumas das fun?es membros da &lasse template set,
Funo/membro :s % um objeto set1
s.size() s.empty() s.insert(elemento) s.erase(elemento) s.find(elemento) s.erase(iterador) s1 == s2

Signifi&ado
Forne&e o nBmero de elementos no &onjunto Forne&e true se o &onjunto estiver va+ioD &aso &ontrrio$ 3alse Insere uma &.)ia de elemento no &onjunto. Se elemento j fi+er )arte do &onjunto$ no tem efeito. Gemove elemento do &onjunto. Se elemento no estiver no &onjunto$ no tem efeito. Forne&e um iterador mutvel lo&ali+ado na &.)ia de elemento no &ojunto. Se elemento no estiver no &onjunto$ forn&e s.end(). #)aga o elemento na )osio do iterador Ierdadeiro se s1.size() == s2.size() e todo elemento de s1 for igual ao elemento &orres)ondente de s2.

6 )r.0imo e0em)lo ilustra a utili+ao da &lasse set da S !.

E0em)lo,
#include <iostream> #include <set>

Um map %$ essen&ialmente$ uma funo dada &omo um &onjunto de )ares ordenados. Para &ada valor primeiro -ue a)are&er em um )ar$ 1 no m0imo um valor segundo tal -ue o )ar (primeiro, segundo) est no map. # &lasse template map im)lementa objetos map na S !. Por e0em)lo$ se se deseja atribuir um nBmero Bni&o a &ada nome em string, )ode/se de&larar um objeto map da seguinte forma, map<string, int> numeroMap; Para valores string &on1e&idos &omo &1aves$ o objeto numeroMap )ode asso&iar um Bni&o valor int. 'omo um objeto set$ um objeto map arma+ena seus elementos em ordem )or meio de seus valores de &1ave. Pode/se es)e&ifi&ar a ordem nas &1aves &omo uma ter&eira entrada entre <>.

!aratona de "rogramao # $otas de %ula - #"

# tabela a seguir a)resenta algumas das fun?es membros da &lasse template map,
Funo/membro :s % um objeto map1
m.size() m.empty() m.insert(elemento)

Signifi&ado
Forne&e o nBmero de )ares no ma) Forne&e true se o ma) estiver va+ioD &aso &ontrrio$ 3alse Insere uma &.)ia de elemento no ma). Elemento % do ti)o pair<TipoChave, T>. Forne&e um valor do ti)o pair<iterator, bool>. Se a insero for bem/su&edida$ a segun da )arte do )ar forne&ido % true e o iterador est lo&ali+ado no elemento inserido. Gemove o elemento &om a chave_alvo. Forne&e um iterador lo&ali+ado no elemento &om o valor chave_alvo. Se elemento no e0istir m.end(). true se o ma) &ont%m os mesmos )aresD &aso &ontrrio$ false.

m.erase(chave_alvo) m.find(chave_alvo) m1 == m2

6 )r.0imo e0em)lo ilustra a utili+ao da &lasse map da S !.

E0em)lo,
#include <iostream>

# &lasse template pair<T1, T2> da S ! )ossui objetos -ue so )ares de valores tais -ue o )rimeiro elemento % do ti)o T1 e o segundo % do ti)o T2. Se umPar % um objeto de ti)o pair<T1, T2>$ ento umPar.first % o )rimeiro elemento$ -ue % do ti)o T1$ e umPar.second % o segundo elemento -ue % do ti)o T2. #s variveis/membros first e second so variveis/membro )Bbli&as$ ento nen1uma funo de a&esso % ne&essria. 6 ar-uivo de &abeal1o )ara o template pair % <utility>. E0istem dois outros containers asso&iativos. #s &lasses templates multiset e multimap so essen&ialmente iguais a set e map$ res)e&tivamente$ a no ser )elo fato de -ue multiset )ermite a re)etio de elementos e multimap )ermite -ue valores mBlti)los sejam asso&iados a &ada valor da &1ave.

Jibliografia
DEITEL, H. M. & DEITEL, P. J. &'' &omo "rogramar. Bookman, 2004.

!aratona de "rogramao # $otas de %ula - #%

SAVIT H, !. &'' %bsoluto. P"a#son, 2004. $%%&:''(((.s)*.+om'%"+$'s%,'. P"s-.*sa/o "m 001'01'20023

Você também pode gostar