English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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.
val:要搜索的值在集合容器中。
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.
Taille logarithmique.
Aucun changement.
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é.
Si une exception est levée, le conteneur ne subit aucune modification.
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.
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.
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.
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