English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++ Uso e exemplo de set value_comp()

C++ STL Set ( Conjunto )

C ++ set value_comp()A função serve para: retornar um objeto de comparação. Esta função é usada para comparar dois elementos para verificar se a chave do primeiro elemento está antes do segundo elemento. Usado para comparar tamanhos de valor.

Por exemplo:-para a coleção m, se dois elementos e1(k1,d1)e e2(k2,d2)é um objeto do tipo value_type, onde k1e k2é do tipo key_type da chave, e d1e d2é do tipo de dados value_type da data type, então m value_comp (e1,e2)equivalente a m key_comp (k1,k2)。

Sintaxe

value_compare value_comp() const;

Nota: o objeto armazenado define o membro função:

bool-operator (value_type &left, value_type &right);

se, por ordem de classificação, o valor de left estiver à frente e não for igual ao valor de right, retornatrue

parâmetros

sem

Retorno de valor

ele retorna um objeto de função de comparação de valor.

Complexo

invariável.

Validade do iterador

sem mudanças.

Concorrência de dados

O contêiner é acessado.

Acesso a elementos sem conteúdo: o acesso simultâneo aos elementos da coleção é seguro.

Segurança de Exceção

Se um exceção for lançada, não haverá nenhuma mudança no contêiner.

Exemplo1

Vamos ver um exemplo simples de comparação de elementos valores:

#include <iostream>
#include <set>
using namespace std;
int main()
{
  set<int> c;
  set<int>::value_compare comp = c.value_comp();
  cout << "comparar2e5(1é verdadeiro, 0 é falso): " << comp(2, 5) << endl;
  cout << "comparar8e5(1é verdadeiro, 0 é falso): " << comp(8, 5) << endl;
}

Saída:

comparar2e5(1é verdadeiro, 0 é falso): 1
comparar8e5(1é verdadeiro, 0 é falso): 0

No exemplo acima, porque2é menor que5, então comp (2,5)retorna verdadeiro; devido a8não é menor que5,comp (8,5)retorna falso.

Exemplo2

Vamos ver um exemplo simples:

#include <iostream>
#include <set>
using namespace std;
int main ()
{
  set<int> myset;
  set<int>::value_compare mycomp = myset.value_comp();
  for (int i = 0; i <=5; i++) myset.insert(i);
  cout << "myset contém:";
  int highest =*myset.rbegin();
  set<int>::iterator it = myset.begin();
  do {
    cout << ' ' << *it;
  } while ( mycomp(*(++it, highest);
  cout << '\n';
  return 0;
}

Saída:

myset contém: 0 1 2 3 4

No exemplo acima, a variável mais alta armazena o último elemento do conjunto myset e inicializa o iterador com o primeiro elemento do conjunto (em ordem de classificação). Do-O loop while é usado para imprimir os elementos que serão executados no loop até que o primeiro chave seja menor que a última chave (para isso, ele usa a função key_comp() chamada mycomp).

Exemplo3

Vamos ver um exemplo simples:

#include <set>
#include <iostream>
int main( )
{
   using namespace std;
   set<int, less<int> > s1;
   set<int, less<int> >::value_compare vc1 = s1.value_comp( );
   bool result1 = vc1( 2, 3 );
   if( result1 == true )   
   {
      cout << "vc1(2,3) retorna valor true, "
           << "onde vc1é s1do objeto da função. "
           << endl;
   }
   else   
   {
      cout << "vc1(2,3) retorna valor false, "
           << "onde vc1é s1do objeto da função. "
           << endl;
   }
   set<int, greater<int> > s2;
   set<int, greater<int> >::value_compare vc2 = s2.value_comp( );
   bool result2 = vc2( 2, 3 );
   if( result2 == true )   
   {
      cout << "vc2(2,3) retorna valor true, "
           << "onde vc2é s2do objeto da função. "
           << endl;
   }
   else   
   {
      cout << "vc2(2,3) retorna valor false, "
           << "onde vc2é s2do objeto da função. "
           << endl;
   }
}

Saída:

vc1(2,3) retorna valor true, onde vc1é s1do objeto da função.
vc2(2,3retorna valor false, onde vc2é s2do objeto da função.

Exemplo4

Vamos ver um exemplo simples para mostrar a diferença entre key_comp() e value_comp():

#include <set>
#include <iostream>
#include<map>
using namespace std;
int main() {
set<int> myset;
int highest1, highest2;
set<int>::key_compare myCompKeyForSet = myset.key_comp();
set<int>::value_compare myCompValForSet = myset.value_comp();
for (int i = 0; i <=5; i++) {
  myset.insert(i);
}
o mais alto1=*myset.rbegin();
set<int>::iterator it = myset.begin();
while ( myCompKeyForSet(*it, o mais alto1) ) it++;
cout << "\no mais alto1 é " << o mais alto1;  // imprime 5
o mais alto2 = *myset.rbegin();
it=myset.begin();
enquanto ( myCompValForSet(*it, o mais alto2) ) it++;
cout << "\no mais alto2 é " << o mais alto2;   // imprime 5
return 0;
}

Saída:

o mais alto1 é 5
o mais alto2 é 5

No exemplo acima, quando comparamos key_comp() e value_comp() para tal contêiner de conjunto, essas duas palavras são idênticas. Para esses tipos de funções, ambas retornarão o mesmo valor.

C++ STL Set ( Conjunto )