English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
C ++ set value_comp()函数的作用是:返回一个比较对象。这个函数用于比较两个元素,以检查第一个元素的键是否在第二个元素之前。用来比较value大小。
例如:-对于集合m,如果两个元素e1(k1,d1)和e2(k2,d2)是value_type类型的对象,其中k1和k2是其key_type类型的键,而d1和d2是其data类型的数据value_type,则m value_comp(e1,e2)等效于m key_comp(k1,k2)。
value_compare value_comp() const;
bool-operator (value_type &left, value_type &right);
如果按排序顺序,left的值在前面且不等于right的值,则返回true。
没有
它返回一个值比较函数对象。
不变。
没有变化。
容器被访问。
没有包含元素的访问:同时访问集合的元素是安全的。
如果引发异常,则容器中没有任何更改。
让我们看一下比较元素值的简单示例:
#include <iostream> #include <set> using namespace std; int main () { set<int> c; set<int>::value_compare comp = c.value_comp(); cout << "比较2和5(1为真,0为假): "<< comp (2, 5) << endl; cout << "比较8和5(1为真,0为假): "<< comp (8, 5) << endl; }
Sortie :
比较2和5(1为真,0为假): 1 比较8和5(1为真,0为假): 0
在上面的示例中,因为2小于5,所以comp (2,5)返回true;由于8不小于5,comp (8,5)返回false。
Laissez-nous voir un exemple simple :
#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 包含:"; int highest =*myset.rbegin(); set<int>::iterator it = myset.begin(); do { cout << ' ' << *it; } while ( mycomp(*(++it, highest); cout << ' '; return 0; }
Sortie :
myset contient: 0 1 2 3 4
Dans cet exemple, la variable la plus haute stocke le dernier élément du jeu myset et initialise l'itérateur avec l'élément premier du jeu (par ordre de tri). Do-La boucle while est utilisée pour imprimer les éléments qui seront exécutés dans la boucle, jusqu'à ce que la première clé soit inférieure à la dernière clé (pour cela, il utilise la fonction key_comp() appelée mycomp).
Laissez-nous voir un exemple simple :
#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) renvoie une valeur true, " << "où vc1est s1de l'objet fonctionnel." << endl; } else { cout << "vc1(2,3) renvoie une valeur false, " << "où vc1est s1de l'objet fonctionnel." << 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) renvoie une valeur true, " << "où vc2est s2de l'objet fonctionnel." << endl; } else { cout << "vc2(2,3) renvoie une valeur false, " << "où vc2est s2de l'objet fonctionnel." << endl; } }
Sortie :
vc1(2,3) renvoie une valeur true, où vc1est s1de l'objet fonctionnel. vc2(2,3) renvoie une valeur false, où vc2est s2de l'objet fonctionnel.
Laissez-nous voir un exemple simple pour illustrer la différence entre key_comp() et 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); } le plus élevé1=*myset.rbegin(); set<int>::iterator it = myset.begin(); while ( myCompKeyForSet(*it, le plus élevé1) ) it++; cout << "\nle plus élevé1 est " << le plus élevé1; // imprime 5 le plus élevé2 = *myset.rbegin(); it=myset.begin(); while ( myCompValForSet(*it, le plus élevé2) ) it++; cout << "\nle plus élevé2 est " << le plus élevé2; // imprime 5 return 0; }
Sortie :
le plus élevé1 est 5 le plus élevé2 est 5
Dans l'exemple ci-dessus, lorsque nous comparons key_comp() et value_comp(), pour de tels conteneurs de collections, ces deux mots sont identiques. Pour ces deux types de fonctions, elles renverront la même valeur.