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

C++ Uso e exemplo do equal_range()

C++ STL Set ( Conjunto )

C ++ set equal_range()A função é usada para retornar os limites do intervalo que contém todos os elementos iguais a val no contêiner. Como o contêiner set não contém valores repetidos, esse intervalo contém no máximo um elemento.

Se val não correspondente a nenhum valor no contêiner, o intervalo de retorno será 0, e os dois iteradores apontarão para o valor mais recente maior que val, caso contrário, se val for maior que todos os elementos do contêiner, ele apontará para end.

Sintaxe

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

O intervalo é definido por dois iteradores, um que aponta para o primeiro elemento não menor que val e outro que aponta para o primeiro elemento maior que val.

Parâmetro

val:O valor a ser pesquisado no contêiner de conjunto.

Retorno

A função retorna um par. O first do par está na fronteira do intervalo, com o mesmo valor que o lower_bound(val) retornará, e o second é o valor retornado pelo upper_bound(val), que é a fronteira superior correspondente.

Complexo

Tamanho em logaritmo.

Validade do iterador

Nenhuma alteração.

Concorrência de dados

O contêiner é acessado (versões const e não const não podem modificar o contêiner).

Acesso simultâneo aos elementos da coleção é seguro.

Segurança de exceção

Se ocorrer uma exceção, o contêiner não será alterado.

Exemplo1

Vamos olhar para um exemplo simples:

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

Saída:

O limite inferior de b é: b
O limite superior de b é: c

No exemplo acima, o limite inferior de b é b e o limite superior de b é c.

Exemplo2

Vamos olhar para um exemplo simples:

#include <iostream>
#include <set>
using namespace std;
 
int main()
{
     // Inicializar o contêiner
    set<int> mp;
 
    // Inserir elementos em ordem aleatória
    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 << "O limite inferior é: " << *ret.first;
    cout << "\nO limite superior é: " << *ret.second;
 
    return 0;
}

Saída:

O limite inferior é 3
O limite superior é 3

No exemplo acima, a função equal_range() retorna até end(), ou seja3,porque tenta encontrar um elemento que não existe no set mp10。

Exemplo3

Vamos olhar para um exemplo simples:

#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 << "O conjunto s1A chave é2O limite superior dos elementos 0 é: "  
        << *(p1.second) << "." << endl;  
  
   cout << "O conjunto s1A chave é2O limite inferior dos elementos 0 é: "  
        << *(p1.first << "." << endl;  
  
   //Directamente chama upper_bound
   s1_RcIter = s1.upper_bound( 20 );  
   cout << "Directamente chama upper_bound(20) obtido por equal_range("  
        << *s1_RcIter << "," << endl  
        << "O segundo elemento correspondente ao pair  
        << "Pelo equal_range(20) retorna." << endl;  
  
   p2 == s1.equal_range( 40 );  
  
    //Se não encontrar a chave correspondente,
    //os dois elementos do pair retornam end()
   if ( ( ( p2.first == s1.end() ) && ( ( p2.second == s1.end() ) )  
      cout << "O conjunto s1Não há chave menor que4os elementos 0." << endl;  
   else  
      cout << "O conjunto s1a chave>= 4Os elementos 0 são: "  
           << *(p1.first << "." << endl; 
           
           return 0;
}

Saída:

o conjunto s1A chave é2O limite superior dos elementos 0 é: 30.
o conjunto s1A chave é2O limite inferior dos elementos 0 é: 20.
Directamente chama upper_bound(20) obtido por equal_range( 30,
O segundo elemento correspondente ao pair2retorna 0).
o conjunto s1Não há chave menor que4o elemento 0.

Exemplo4

Vamos olhar para um exemplo simples:

#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,set<int>::const_iterator> ret;
  ret = myset.equal_range(30);
  cout << "Ponteiro Inferior para: " << *ret.first << '\n';
  cout << "Ponteiro Superior para: " << *ret.second << '\n';
  return 0;
}

Saída:

Ponteiro Inferior para: 30
Ponteiro Superior para: 40

C++ STL Set ( Conjunto )