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

Tutorial di Base di C++

Controllo di flusso C++

Funzioni in C++

Array e stringhe C++

Strutture dati C++

Classi e oggetti C++

Puntatori in C++

Ereditarietà in C++

Tutorial di STL di C++

Manuale di riferimento C++

Metodo e esempio di utilizzo di key_comp() in C++ set

Set (insieme) in STL di C++

C ++ set key_comp()La funzione viene utilizzata per restituire una copia dell'oggetto di confronto, che viene utilizzato dal contenitore set per confrontare le chiavi.

L'oggetto di confronto può essere utilizzato per confrontare i valori delle chiavi di due elementi all'interno del contenitore. Questo oggetto di confronto è fornito al momento della costruzione dell'oggetto, può essere un puntatore a una funzione o un oggetto di funzione. In entrambi i casi, accetta due parametri dello stesso tipo, se il primo parametro precede il secondo parametro, restituisce true, altrimenti restituisce false.

Attenzione: per impostazione predefinita, l'oggetto di confronto è un oggetto less, che restituisce un valore uguale all'operatore <.

Sintassi

Key_compare key_comp() const;

Attenzione: l'oggetto memorizzato definisce i membri delle funzioni:

operator bool (const Key & _Left, const Key & _Right);

Restituisce true se _Left è in posizione anteriore e l'ordine di ordinamento non è uguale a _Right.

Parametro

Nessuno

Valore di ritorno

Restituisce l'oggetto della funzione di confronto delle chiavi.

Complesso

Immutabile.

Validità dell'iteratore

Nessuna modifica.

Conflitto di dati

Il contenitore viene acceduto.

Non è possibile accedere a qualsiasi elemento contenuto: è sicuro accedere e modificare contemporaneamente gli elementi.

Sicurezza eccezionale

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

Esempio 1

Ecco un esempio semplice di confronto delle chiavi di valore:

#include <iostream>
#include <set>
 
 using namespace std;
 int main () 
 { 
  set<int> m; 
  set<int>::key_compare comp = m.key_comp(); 
  cout << "Confronto delle chiavi (1 è vero, 0 è falso): " << comp(1, 5) << endl; 
  cout << "Confronto delle chiavi (1 è vero, 0 è falso): " << comp(3, 2) << endl; 
 }

Output:

Confronto delle chiavi (1 è vero, 0 è falso): 1
Confronto delle chiavi (1 è vero, 0 è falso): 0

Nell'esempio precedente, comp(1, 5) restituisce true perché 1 è minore di 5. comp(3, 2) restituisce false perché 3 è maggiore di 2.

Esempio 2

Guardiamo un esempio semplice:

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

Output:

myset contiene: 0 1 2 3 4

Nell'esempio precedente, la variabile più alta memorizza l'ultimo elemento della集合 myset e inizializza l'iteratore utilizzando il primo elemento della集合 (in ordine di sortita). 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

Guardiamo un esempio semplice:

#include <set>  
#include <iostream>  
  
int main( )  
{  
   using namespace std;  
  
   set<int, less<int>> s1;  
   set<int, less<int>>::key_compare kc1 = s1.key_comp();  
   bool result1 = kc1( 2, 3 );  
   if( result1 == true )     
   {  
      cout << "kc1(2,3) restituisce il valore true"  
           << "Dove kc1 è l'oggetto funzionale di s1.";  
           << endl;  
   }  
   else     
   {  
      cout << "kc1(2,3) restituisce il valore false ";  
           << "Dove kc1 è l'oggetto funzionale di s1.";  
           << endl;  
   }  
  
   set<int, greater<int>> s2;  
   set<int, greater<int>>::key_compare kc2 = s2.key_comp();  
   bool result2 = kc2( 2, 3 );  
   if(result2 == true)     
   {  
      cout << "kc2(2,3) restituisce il valore true, ";  
           << "Dove kc2 è l'oggetto funzionale di s2.";  
           << endl;  
   }  
   else     
   {  
      cout << "kc2(2,3) restituisce il valore false, ";  
           << "Dove kc2 è l'oggetto funzionale di s2.";  
           << endl;  
   }  
}

Output:

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

Nell'esempio sopra, sono stati utilizzati due insiemi, ovvero m1 e m2. L'oggetto di confronto delle chiavi di m1 è più piccolo rispetto a quello di m2. Pertanto, quando confrontiamo (2,3), l'oggetto funzionale kc1 di m1 restituisce true, mentre l'oggetto funzionale kc2 di m2 restituisce false.

Esempio 4

Guardiamo un esempio semplice:

#include <set>
#include <iostream>
#include <string>
using namespace std;
typedef set<int> setObj;
int main(){
	// Costruttore predefinito
	setObj c1;
    setObj::key_compare kc = c1.key_comp();
	cout << "Utilizzare l'oggetto funzionale kc per confrontare (10,4)..." 
		<< endl ;
	if (kc(10, 4) == true)
		cout << "kc(10, 4) == true, il che significa 10 < 4" << endl;
	else
		cout << "kc(10,4) == false, il che significa 10 > 4" << endl;
return 0;
}

Output:

Utilizzare il funzione oggetto kc per cercare confronto(10,4)...
kc(10,4) == false, il che significa 10 > 4

Nell'esempio sopra, il funzione oggetto kc di set setobj viene chiamata compare(10, 4), se è true, restituisce 10 < 4; se non è true, restituisce 10 > 4.

Set (insieme) in STL di C++