Olá pessoal, sou o Filipe Névola, este blog foi muito ativo durante 2009 enquanto eu fazia universidade,
hoje em dia estou ativo no Twitter @FilipeNevola e voltando a escrever posts agora no meu perfil do Medium (29/05/2016).

[ 23/05/2009 ] 0

Set (STL), vetor que não guarda dados repetidos

Sets são um tipo de containers associativos únicos que armazenam os elementos, e na qual os próprios elementos são as chaves. Containers como este são recipientes especialmente concebidos para serem eficientes acessando seus elementos pela sua chave, diferente de um vetor que é melhor acessado pelo seu índice. Internamente, os elementos de um conjunto são sempre ordenados. Os algoritmos do set são normalmente tratados sob a forma pesquisa binária.

Podemos perceber algumas vantagens:
1 – Não precisamos retirar elementos repetidos de um grupo de dados porque ele mesmo já faz isso.
2 – A todo momento temos o conjunto de dados ordenado, sendo assim, não é necessário fazer nenhum tipo de ordenação.

Algumas desvantagens:
1 – Não usamos em problemas que necessitamos de valores repetidos.
2 – Existe um custo em manter sempre esse conjunto de dados ordenados e precisamos sempre analisar um pouco se vale a pena ou não.

Eu sempre posso/quero perder os dados repetidos ?

Não, as vezes precisamos guardar todos, nesses casos podemos usar o multiset.

Como o nome diz ele permite múltiplos dados, ele guardará elementos repetidos em posições diferentes.
O multiset mantém os dados ordenados assim como o set, e como ele permite dados repetidos esse dados sempre aparecerão em posições adjacentes no vetor.

Obs: Nos códigos (Troque as " (aspas) por < >):
Exemplo de inserção:
#include "iostream"
#include "set"
using namespace std;
int main () {
set"int" myset;
// set some initial values:
for (int i=5; i>=1; i--)
myset.insert(i*10); // set: 50 40 30 20 10
}


Exemplo de impressão:
#include "iostream"
#include "set"
using namespace std;
int main () {
set"int" myset;
set"int"::iterator it; // é um iterador do tipo set"int", ele serve para se percorrer um set de inteiros
printf ("myset contains:“);
//Neste for percorremos de myset.begin() que é o início
//até myset.end() que é o final do set
for (it=myset.begin(); it!=myset.end(); it++){
//O it é um ponteiro então para acessar seu valor usamos *it.
printf(“%d ”, *it);
}
}


Não deixe de conferir como usar o map!

Novo Comentário