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

C++ Tutoriel de base

C++ Contrôle de flux

C++ Fonction

C++ Tableau & Chaîne

C++ Structure de données

C++ Classe & Objet

C++ Pointeur

C++ Héritage

C++ STL 教程

C++ 参考手册

C++ set value_comp() 使用方法及示例

C++ Set (ensemble) STL

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

参数

没有

返回值

它返回一个值比较函数对象。

复杂

不变。

迭代器有效性

没有变化。

数据争用

容器被访问。

没有包含元素的访问:同时访问集合的元素是安全的。

异常安全

如果引发异常,则容器中没有任何更改。

Exemple1

让我们看一下比较元素值的简单示例:

#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。

Exemple2

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).

Exemple3

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.

Exemple4

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.

C++ Set (ensemble) STL