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

C++ Tutoriel de base

C++ Contrôle de flux

C++ Fonctions

C++ Tableaux & chaînes

C++ Structures de données

C++ Classes & objets

C++ Pointeurs

C++ Héritage

C++ Tutoriel STL

C++ Manuel de référence

C++ Méthode et exemple d'utilisation de equal_range()

C++ Set (ensemble) STL

C ++ set equal_range()Cette fonction est utilisée pour retourner les limites de l'intervalle contenant toutes les éléments égaux à val dans le conteneur. Comme il n'y a pas de valeurs répétées dans le conteneur set, cet intervalle contiendra au plus un élément.

Si val ne correspond à aucune valeur dans le conteneur, la plage de retour sera 0, et les deux itérateurs pointeront sur la valeur la plus proche de val, sinon, si val est supérieur à toutes les valeurs du conteneur, il pointera sur end.

Syntaxe

pair<const_iterator,const_iterator> equal_range(const value_type& val) const;
pair<iterator,iterator> equal_range(const value_type& val);

Ce domaine est défini par deux itérateurs, l'un pointant sur le premier élément non inférieur à val, et l'autre pointant sur le premier élément supérieur à val.

Paramètre

val:要搜索的值在集合容器中。

Valeur de retour

Cette fonction retourne un pair. Dans ce pair, first se situe à la limite inférieure de l'intervalle, et a la même valeur que celle retournée par lower_bound(val), tandis que second a la même valeur que celle retournée par upper_bound(val), et correspond à la limite supérieure de l'intervalle.

Complexité

Taille logarithmique.

Validité des itérateurs

Aucun changement.

Concurrence des données

L'accès au conteneur (les versions const et non const ne peuvent pas modifier le conteneur).

L'accès simultané aux éléments de l'ensemble est sécurisé.

Sécurité des exceptions

Si une exception est levée, le conteneur ne subit aucune modification.

Exemple1

Laissez-nous voir un exemple simple :

#include <iostream>
#include <set>
using namespace std;
int main(void) {
   set<char> m = {'a','b','c','d'};
   auto ret = m.equal_range('b');
   cout << "La limite inférieure de b est: " << *ret.first << endl;
   cout << "La limite supérieure de b est: " << *ret.second << endl;
   return 0;
}

Sortie :

La limite inférieure de b est: b
La limite supérieure de b est: c

Dans l'exemple ci-dessus, la limite inférieure de b est b, et la limite supérieure de b est c.

Exemple2

Laissez-nous voir un exemple simple :

#include <iostream>
#include <set>
using namespace std;
 
int main()
{
     // Initialiser le conteneur
    set<int> mp;
 
    // Insérer des éléments dans un ordre aléatoire
    mp.insert( 4 );
    mp.insert( 1 );
    mp.insert( 6 );
 
    pair<set<int>::const_iterator,set<int>::const_iterator> ret;
 
    ret = mp.equal_range(10);
    cout << "La limite inférieure est: " << *ret.first;
    cout << "\nLa limite supérieure est: " << *ret.second;
 
    return 0;
}

Sortie :

Le seuil inférieur est 3
Le seuil supérieur est 3

Dans l'exemple précédent, la fonction equal_range() retourne à end(), c'est-à-dire3parce qu'il essaie de trouver un élément qui n'existe pas dans le set mp10.

Exemple3

Laissez-nous voir un exemple simple :

#include <set>  
#include <iostream>  
  
int main( )  
{  
   using namespace std;  
   typedef set<int, less<int> > IntSet;  
   IntSet s1;  
   set<int, less<int> > :: const_iterator s1_RcIter;  
  
   s1.insert( 10 );  
   s1.insert( 20 );  
   s1.insert( 30 );  
  
   pair<IntSet::const_iterator, IntSet::const_iterator> p1, p2;  
   p1 = s1.equal_range( 20 );  
  
   cout << "L'ensemble s1La clé est2Le seuil supérieur des éléments 0 est: "  
        << *(p1.second) << "." << endl;  
  
   cout << "L'ensemble s1La clé est2Le seuil inférieur des éléments 0 est: "  
        << *(p1.first) << "." << endl;  
  
   //Appel direct de upper_bound
   s1_RcIter = s1.upper_bound( 20 );  
   cout << "Appel direct de upper_bound (20) est obtenu "  
        << *s1_RcIter << "," << endl  
        << "L'élément secondaire correspondant au pair"  
        << "Par equal_range (20) est retourné." << endl;  
  
   p2 = s1.equal_range( 40 );  
  
    //Si la clé correspondante n'est pas trouvée,
    //Les deux éléments du pair retournent end()
   if ( ( p2.first == s1.end( ) ) && ( p2.second == s1.end( ) ) )  
      cout << "L'ensemble s1Il n'existe pas de clé inférieure à40 de l'élément." << endl;  
   else  
      cout << "L'ensemble s1la clé>= 4Les éléments 0 sont: "  
           << *(p1.first) << "." << endl; 
           
           return 0;
}

Sortie :

l'ensemble s1La clé est2Le seuil supérieur des éléments 0 est: 30.
l'ensemble s1La clé est2Le seuil inférieur des éléments 0 est: 20.
Appel direct de upper_bound(20) 30,
La deuxième élément correspondant au pair est obtenue par equal_range(20) est retourné.
l'ensemble s1Il n'existe pas de clé inférieure à4l'élément 0.

Exemple4

Laissez-nous voir un exemple simple :

#include <iostream>
#include <set>
using namespace std;
int main ()
{
  std::set<int> myset;
  for (int i=1; i<=5; i++myset.insert(i*10);   // myset: 10 20 30 40 50
  pair<std::set<int>::const_iterator,std::set<int>::const_iterator> ret;
  ret = myset.equal_range(30);
  cout << "Pointeur inférieur vers: " << *ret.first << '\n';
  cout << "Pointeur supérieur vers: " << *ret.second << '\n';
  return 0;
}

Sortie :

Pointeur inférieur vers: 30
Pointeur supérieur vers: 40

C++ Set (ensemble) STL