Conjuntos em C++
Definir (definir) — é um contêiner que classifica automaticamente os elementos adicionados em ordem crescente. Mas ao adicionar valores idênticos, set armazenará apenas uma instância dele (multiset - multiset- pode conter duplicatas). Quando um novo elemento é adicionado ao conjunto, ele imediatamente se encaixa para não violar a ordem de classificação.  
Os conjuntos em C++ são definidos na biblioteca de modelos padrão STL por meio da classe set (multiset).
Conjuntos são árvores rubro-negras binárias. As operações de pesquisa, exclusão e inserção têm complexidade logarítmica.
 
Para usar conjuntos, você precisa incluir a biblioteca “
set”:
#include <definir>
 
Declaração de conjunto:
definir<int> meuSet; // Declarando um conjunto vazio.
conjunto múltiplo<int> meuSet; // Declarando um multiset vazio.
 
Funções para trabalhar com um conjunto (conjunto)
 
empty() - verifica a ausência de elementos no container
 
size() - Retorna o número de elementos no container
 
clear() - Limpa o container
 
insert() - Insere elementos
 
erase() - Remove elementos
 
count() - Retorna o número de elementos correspondentes a uma determinada chave
 
find() - Localiza um elemento com uma chave específica
 
lower_bound() - Retorna um iterador para o primeiro elemento não inferior ao valor fornecido
 
upper_bound() - Retorna um iterador para o primeiro elemento maior que o valor especificado
 
 
Exemplo de conjunto e multiconjunto
#include <iostream>
#include <definir>
usando namespace std;
int main()
{
    definir<int> meuSet1; // declarou um conjunto vazio
    conjunto múltiplo<int> meuSet2; // declarou um multiset vazio
    // adiciona elementos ao conjunto
    mySet1.insert(1);
    mySet1.insert(2);
    mySet1.insert(3);
    mySet1.insert(1);
    // adiciona elementos ao multiset
    mySet2.insert(1);
    mySet2.insert(2);
    mySet2.insert(3);
    mySet2.insert(1);
    set<int>::iterator it; //cria um iterador
    for(it = mySet1.begin(); it != mySet1.end(); it++) { // Mostra todos os elementos
        cout << (*it) << " "; // conjuntos
    }
    cout << endl;
    for(it = mySet2.begin(); it != mySet2.end(); it++) { // Saída de todos os elementos
        cout << (*it) << " "; // multiconjuntos
    }
    retorna 0;
}