English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
C++ set equal_range()La funzione viene utilizzata per restituire i limiti dell'intervallo che contiene tutti gli elementi uguali a val nel contenitore. Poiché il contenitore set non contiene valori duplicati, questo intervallo può contenere al massimo un elemento.
Se val non corrisponde a nessun valore del contenitore, l'intervallo di ritorno sarà 0, entrambi gli iteratori puntano al valore più grande recente rispetto a val, altrimenti, se val è maggiore di tutti gli elementi del contenitore, puntano a end.
pair<const_iterator,const_iterator> equal_range(const value_type& val) const; pair<iterator,iterator> equal_range(const value_type& val);
L'intervallo è definito da due iteratori, uno che punta al primo elemento non minore di val, l'altro che punta al primo elemento maggiore di val.
val: Valore da cercare nel contenitore della collection.
La funzione restituisce un pair. Il first del pair si trova nel limite inferiore dell'intervallo e ha lo stesso valore del valore restituito da lower_bound(val), il second del pair è uguale al valore restituito da upper_bound(val) e corrisponde all'upper bound dell'intervallo.
La dimensione è logaritmica.
Nessuna modifica.
Il contenitore viene visitato (entrambe le versioni const e non const non possono modificare il contenitore).
L'accesso simultaneo agli elementi della集合 è sicuro.
Se si verifica un'eccezione, il contenitore non subisce modifiche.
Lasciate che vi mostri un esempio semplice:
#include <iostream> #include <set> using namespace std; int main(void) { set<char> m = {'a','b','c','d'}; auto ret = m.equal_range('b'); cout << "Il limite inferiore di b è: " << *ret.first << endl; cout << "Il limite superiore di b è: " << *ret.second << endl; return 0; }
输出:
Il limite inferiore di b è: b Il limite superiore di b è: c
Nel seguente esempio, il limite inferiore di b è b, il limite superiore di b è c.
Lasciate che vi mostri un esempio semplice:
#include <iostream> #include <set> using namespace std; int main() { // Inizializzare il contenitore set<int> mp; // Inserire elementi in ordine casuale 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 << "Il limite inferiore è: " << *ret.first; cout << "\nIl limite superiore è: " << *ret.second; return 0; }
输出:
Il limite inferiore è 3 Il limite superiore è 3
Nel seguente esempio, la funzione equal_range() ritorna a end(), ovvero 3, perché cerca di trovare 10 non esistente nel set mp.
Lasciate che vi mostri un esempio semplice:
#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 << "Il limite superiore dell'elemento con chiave 20 nella集合s1 è: " << *(p1.second) << "." << endl; cout << "Il limite inferiore dell'elemento con chiave 20 nella集合s1 è: " << *(p1.first) << "." << endl; // Estratto direttamente con upper_bound s1_RcIter = s1.upper_bound(20); cout << "Estratto direttamente con upper_bound(20) otteniamo " << *s1_RcIter << "," << endl << "L'elemento secondario del pair corrispondente" << " restituito da equal_range(20)." << endl; p2 = s1.equal_range(40); // Se non si trova una chiave corrispondente, // Entrambi gli elementi del pair restituiscono end() if ((p2.first == s1.end()) && (p2.second == s1.end())) cout << "La集合s1 non ha elementi di chiave inferiori a 40." << endl; else cout << "Gli elementi di chiave >= 40 nella集合s1 sono: " << *(p1.first) << "." << endl; return 0; }
输出:
Il limite superiore dell'elemento con chiave 20 nella集合s1 è: 30. Il limite inferiore dell'elemento con chiave 20 nella集合s1 è: 20. Estratto direttamente con upper_bound(20) otteniamo 30, L'elemento secondario del pair corrispondente è restituito da equal_range(20). La集合s1 non ha elementi di chiave inferiori a 40.
Lasciate che vi mostri un esempio semplice:
#include <iostream> #include <set> using namespace std; int main () { std::set<int> myset; per (int i = 1; i <= 5; i++) myset.insert(i * 10); // myset: 10 20 30 40 50 pair<std::set<int>::const_iterator,set<int>::const_iterator> ret; ret = myset.equal_range(30); cout << "指向下限: " << *ret.first << '\n'; cout << "指向上限: " << *ret.second << '\n'; return 0; }
输出:
指向下限: 30 指向上限: 40