Classificação de elementos em um conjunto C ++

Classificação de elementos em um conjunto C ++
Um exemplo de um conjunto é: st = 'e', 'a', 'd', 'b', 'c'

Os caracteres de entrada aqui são não classificados. Este conjunto pode ser criado com a seguinte declaração:

definir st = 'e', 'a', 'd', 'b', 'c';

Este é um conjunto de chars. É possível ter um conjunto de outro tipo. Seja qual. Considere o seguinte programa:

#incluir
#incluir
usando namespace std;
int main ()

setSt = 'e', 'a', 'd', 'b', 'c';
para (set :: iterator iter = st.começar(); iter != st.fim(); iter ++)
cout<< *iter<< ", ";
cout<retornar 0;

A saída é:

A, B, C, D, E,

A saída é classificada ascendendo quando a entrada não foi classificada. Depois que os elementos foram inseridos em um conjunto, eles ficam classificados. Com a configuração padrão, como no programa acima, o tipo está ascendente.

O programa acima começou com a inclusão da biblioteca iostream. Isso é necessário para uso com o terminal (console). A próxima linha é outra diretiva que inclui a biblioteca de conjuntos. A linha depois não é uma diretiva. É uma declaração que termina com um ponto de vírgula insistindo que qualquer nome não precedido por "std ::" é do espaço de nome padrão.

As linhas de cabeçalho são seguidas pela função C ++ Main (). A primeira declaração na função principal declara o conjunto. O segundo segmento de código exibe os valores do conjunto, que deveriam ter sofrido classificação interna, por c++.

Tendo o conjunto classificado ascendente

No espaço de nome padrão, a sintaxe para construir um conjunto é realmente:

modelo, Classe alocador = alocador> Conjunto de classe;

Existem três especializações de modelo aqui. Se o último não for dado pelo programador, o valor padrão será escolhido por c++. Se o último e o segundo não são dados pelo programador, seus valores padrão serão escolhidos. O valor padrão para a segunda especialização é "menos", o que significa, classificar ascendente. Se omitido, o conjunto ainda está classificado ascendente. Se presente como "menos", o conjunto é classificado ascendente, como mostra o seguinte programa:

#incluir
#incluir
usando namespace std;
int main ()

definirst = 'e', 'a', 'd', 'b', 'c';
para (set :: iterator iter = st.começar(); iter != st.fim(); iter ++)
cout<< *iter<< ", ";
cout<retornar 0;

Observe que "char" está no lugar de "chave" em "menos". A saída é:

A, B, C, D, E,

classificado ascendente. O programa começa com a inclusão da biblioteca iostream. Isso é necessário para uso com o terminal (console). A próxima linha é outra diretiva que inclui a biblioteca de conjuntos. A linha depois não é uma diretiva. É uma declaração que termina com um ponto de vírgula insistindo que qualquer nome não precedido por "std ::" é do espaço de nome padrão.

As linhas de cabeçalho são seguidas pela função C ++ Main (). A primeira declaração na função principal declara o conjunto usando "menos" como a segunda especialização do modelo. O segundo segmento de código exibe os valores do conjunto, que deveriam ter sido submetidos a classificação interna adequadamente, por c++.

Tendo o conjunto classificado descendente

Para ter um conjunto de descendente, a segunda especialização deve ser incluída. É "maior", onde "chave" é substituída pelo tipo de dados. Cada vez maiores são funções predefinidas na biblioteca de conjuntos. O programa a seguir resulta em um conjunto que é classificado descendente:

#incluir
#incluir
usando namespace std;
int main ()

definirst = 'e', 'a', 'd', 'b', 'c';
para (set :: iterator iter = st.começar(); iter != st.fim(); iter ++)
cout<< *iter<< ", ";
cout<retornar 0;

A saída é:

E, D, C, B, A,

descendo classificado. O programa começa com a inclusão da biblioteca iostream. Isso é necessário para uso com o terminal (console). A próxima linha é outra diretiva que inclui a biblioteca de conjuntos. A linha depois não é uma diretiva. É uma declaração que terminou com um semicolon, insistindo que qualquer nome não precedido por "std ::" é do espaço de nome padrão.

As linhas de cabeçalho são seguidas pela função C ++ Main (). A primeira declaração na função principal declara o conjunto usando "maior" como a segunda especialização do modelo. O segundo segmento de código exibe os valores do conjunto, que deveriam ter sido submetidos a classificação interna adequadamente, por c++.

Observadores

As sintaxes para os observadores do conjunto são:

key_compare key_comp () const;

e

value_compare value_comp () const;
key_compare key_comp () const
Considere o seguinte segmento de código:
definir> st = 'e', 'a', 'd', 'b', 'c';
bool bl = st.key_comp () ('c', 'd');
cout << bl << endl;

A saída é: 1, para verdadeiro.

key_comp () é uma função de membro da classe Set. Não leva nenhum argumento. Ele retorna um objeto de função que é uma função que leva dois argumentos. O objeto de função (chamada) é identificado na segunda declaração acima como “ST.key_comp () () ”. Espera -se que seus argumentos sejam elementos do conjunto após a classificação interna com base na especialização do modelo de comparação.

Se seu primeiro argumento ocorrer primeiro no set após a classificação interna, o objeto de função retornará verdadeiro, caso contrário, ele retornará false. Tudo o que é codificado na segunda declaração acima.

Se a especialização do modelo de comparação tivesse sido "maior", a saída teria sido 0, para falsa.

value_compare value_comp () const;

Isso diz respeito aos valores do conjunto de pares de chave/valor - veja mais adiante.

Conclusão

Depois que os elementos foram inseridos em um conjunto em C ++, eles são imediatamente classificados internamente. Se a especialização do modelo de comparação for "menos", que é o padrão e pode ser omitida, a classificação será feita ascendente. Se for "maior", a classificação será feita descendo. "Chave" nessas expressões é substituído pelo tipo de valores no conjunto. Os valores são de um tipo.

Portanto, um conjunto não precisa de uma função de membro de classificação porque os valores são sempre classificados. Quando um conjunto é criado com alguns elementos iniciais, esses elementos são classificados. Qualquer inserção de qualquer elemento depois que causa re-ratificação. Os valores de um conjunto como o descrito acima são chamados de chaves. No entanto, alguns conjuntos podem ter pares de chave/valor - veja mais adiante.