English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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).
value_compare value_comp() const;
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.
Nessuno
Restituisce un oggetto funzione di confronto di valore.
Immutabile.
Nessuna modifica.
Il contenitore viene visitato.
Accesso non contenente elementi: è sicuro accedere contemporaneamente agli elementi della raccolta.
Se viene lanciata un'eccezione, non ci sono modifiche nel contenitore.
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.
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).
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.
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.