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

Utilizzo e esempio di value_comp() di C++ set

Set (insieme) STL C++

Set C++ value_comp()Il ruolo della funzione è: restituire un oggetto di confronto. Questa funzione viene utilizzata per confrontare due elementi per verificare se la chiave del primo elemento è prima del secondo elemento. Utilizzato per confrontare le dimensioni dei valori.

Ad esempio: - Per l'insieme m, se due elementi e1 (k1, d1) e e2 (k2, d2) sono oggetti di tipo value_type, dove k1 e k2 sono le chiavi di tipo key_type e d1 e d2 sono i dati di tipo data value_type, allora m value_comp(e1, e2) è equivalente a m key_comp(k1, k2).

Sintassi

value_compare value_comp() const;

Attenzione: l'oggetto di archiviazione definisce i membri della funzione:

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

Se il valore di left è anteriore rispetto a quello di right in ordine di sorting e non è uguale al valore di right, restituiscetrue.

Parametro

Nessuno

Ritorna il valore

Restituisce un oggetto funzione di confronto di valore.

Complesso

Immutabile.

Validità degli iteratori

Nessuna modifica.

Conflitto di dati

Il contenitore viene visitato.

Accesso non contenente elementi: è sicuro accedere contemporaneamente agli elementi della raccolta.

Sicurezza dalle eccezioni

Se viene lanciata un'eccezione, non ci sono modifiche nel contenitore.

Esempio 1

Lasciateci vedere un esempio semplice di confronto tra valori degli elementi:

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

Output:

Confronto 2 e 5 (1 è vero, 0 è falso): 1
Confronto 8 e 5 (1 è vero, 0 è falso): 0

Nell'esempio sopra, poiché 2 è minore di 5, comp(2, 5) restituisce true; poiché 8 non è minore di 5, comp(8, 5) restituisce false.

Esempio 2

Lasciateci vedere un esempio semplice:

#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 contiene:";
  int highest = *myset.rbegin();
  set<int>::iterator it = myset.begin();
  do {
    cout << ' ' << *it;
  }; while (mycomp(*(++it), highest));
  cout << '\n';
  return 0;
}

Output:

myset contiene: 0 1 2 3 4

Nell'esempio sopra, la variabile più alta memorizza l'ultimo elemento del set myset e inizializza l'iteratore con l'elemento primo del set (per ordine di sorting). Il ciclo do-while viene utilizzato per stampare gli elementi che eseguiranno il ciclo fino a quando il primo chiave è minore della chiave più alta (per questo, utilizza la funzione key_comp() chiamata mycomp).

Esempio 3

Lasciateci vedere un esempio semplice:

#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) restituisce il valore true, "
           << "dove vc1 è l'oggetto funzionale di s1."
           << endl;
   }
   else   
   {
      cout << "vc1(2,3) restituisce il valore false, "
           << "dove vc1 è l'oggetto funzionale di s1."
           << 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) restituisce il valore true, "
           << "dove vc2 è l'oggetto funzionale di s2."
           << endl;
   }
   else   
   {
      cout << "vc2(2,3) restituisce il valore false, "
           << "dove vc2 è l'oggetto funzionale di s2."
           << endl;
   }
}

Output:

vc1(2,3) restituisce il valore true, dove vc1 è l'oggetto funzionale di s1.
vc2(2,3) restituisce il valore false, dove vc2 è l'oggetto funzionale di s2.

Esempio 4

Lasciate che vi mostriamo un esempio semplice per illustrare la differenza tra 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);
}
highest1 = *myset.rbegin();
set<int>::iterator it = myset.begin();
while ( myCompKeyForSet(*it, highest1) ) it++;
cout << "\nhighest1 is " << highest1; // prints 5
highest2 = *myset.rbegin();
it=myset.begin();
while (myCompValForSet(*it, highest2) ) it++;
cout << "\nhighest2 è " << highest2; // stampa 5
return 0;
}

Output:

highest1 è 5
highest2 è 5

Negli esempi sopra, quando confrontiamo key_comp() e value_comp(), per tali contenitori di insieme, queste due parole sono le stesse. Per entrambi i tipi di funzione, restituiranno lo stesso valore.

Set (insieme) STL C++