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

Utilizzo e esempio di equal_range() in C++ set

STL Set(集合)C++

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.

Sintassi

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.

Parametro

val: Valore da cercare nel contenitore della collection.

Valore di ritorno

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.

Complessa

La dimensione è logaritmica.

Validità degli iteratori

Nessuna modifica.

Conflitto di dati

Il contenitore viene visitato (entrambe le versioni const e non const non possono modificare il contenitore).

L'accesso simultaneo agli elementi della集合 è sicuro.

Sicurezza delle eccezioni

Se si verifica un'eccezione, il contenitore non subisce modifiche.

Esempio 1

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.

Esempio 2

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.

Esempio 3

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.

Esempio 4

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

STL Set(集合)C++