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

C++ Uso e exemplo de lower_bound() do set

C++ Set (Conjunto) STL

C ++ set lower_bound()Função usada para retornar um iterador que aponta para a chave no contêiner de conjunto, equivalente ao valor passado no parâmetro.

Se não houver val no contêiner de conjunto, ele retornará um iterador que aponta para o próximo elemento maior que val.

Sintaxe

iterator lower_bound (const value_type& val);                        //C++ 11 Antes
iterator lower_bound (const value_type& val);                        //De C++ 11Início
const_iterator lower_bound (const value_type& val) const;      //De C++ 11Início

Parâmetro

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

Retorno

Ele retorna um iterador que aponta para o valor no contêiner de conjunto, equivalente ao valor passado no parâmetro. Se não houver tal elemento, ele retorna end().

Complexo

Tamanho é logarítmico.

Validade do iterador

Sem alterações.

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, não haverá alterações no contêiner.

Exemplo1

Vamos ver um exemplo simples, para obter o limite inferior de uma chave dada:

#include<iostream>
#include<set>
using namespace std;
int main(void) {
   set<char> m = {'a','b','c','d','e'};
          
   auto it = m.lower_bound('c');
   cout << "Limite inferior (=) " << *it;
   return 0;
}

Saída:

Limite inferior (=) c

No exemplo acima, o limite inferior é c.

Exemplo2

Vamos ver um exemplo simples, para excluir elementos do set de baixo para cima:

#include<iostream>
#include<set>
using namespace std;
int main ()
{
  set<int> myset;
  set<int>::iterator itlow,itup;
  for (int i=1; i<10; i++myset.insert(i)*10); // 10 20 30 40 50 60 70 80 90
  itlow=myset.lower_bound(30);                //       ^
  itup=myset.upper_bound(60);                 //       ^
  myset.erase(itlow,itup);                     // 10 20 70 80 90
  std::cout << "myset contém:";
  for (set<int>::iterator it=myset.begin(); it!=myset.end(); ++it)
    cout << " " << *it;
  cout << "\n";
  return 0;
}

Saída:

myset contém: 10 20 70 80 90

No exemplo acima, a função delete() remove elementos do conjunto set a partir do limite inferior (=) até ao limite superior (>), e imprime o conteúdo restante.

Exemplo3

Vamos ver um exemplo simples:

#include<set>  
#include<iostream>  
using namespace std;
  
int main()  
{  
   using namespace std;  
   set<int> s1;  
   set<int> :: const_iterator s1_AcIter, s1_RcIter;  
  
   s1.insert( 10 );  
   s1.insert( 20);  
   s1.insert( 30);  
  
   s1_RcIter = s1.lower_bound( 20);  
   cout << "conjunto s1a chave é2os elementos de 0 são: "  
        << *s1_RcIter << "." << endl;  
  
   s1_RcIter = s1.lower_bound( 40);  
  
   // se não encontrar uma chave correspondente, retorna end()
   if (s1_RcIter == s1.end());  
      cout << "conjunto s1nenhum valor de chave4os elementos de 0." << endl;  
   else  
      cout << "conjunto s1e a chave é4os elementos de 0 são: "  
           << *s1_RcIter << "." << endl;  
  
     //pode encontrar o elemento específico no conjunto
    //usando iteradores referenciados para localizar a posição 
   s1_AcIter = s1.end());  
   s1_AcIter--;  
   s1_RcIter = s1.lower_bound( *s1_AcIter);  
   cout << "s1os elementos cujas chaves correspondem à última chave são:"  
        << *s1_RcIter << "." << endl;  
        
        return 0;
}

Saída:

conjunto s1a chave é2os elementos de 0 são: 20.
conjunto s1nenhum valor de chave4os elementos de 0.
s1os elementos cujas chaves correspondem à última chave são:30.

Exemplo4

Vamos ver um exemplo simples:

#include<set>
#include<iostream>
using namespace std;
 
int main()
{
 
    set<int> mp; 
    // inserir elementos em ordem aleatória
    mp.insert( 2 );
    mp.insert( 1 );
    mp.insert( 5 );
    mp.insert( 4 );
    
    cout << "elemento é: \n";
    for (auto it = mp.begin(); it != mp.end(); it++) {
        cout << (*it) << endl;
    }
 
    //quando2existe
    auto it = mp.lower_bound(2);
    cout << "chave2o limite inferior é ";
    cout << (*it) << endl;
 
     //quando não existir3quando
     //apontando3o próximo maior
    it = mp.lower_bound(3);
    cout << "chave3o limite inferior é ";
    cout << (*it) << endl;
 
    // quando exceder6
    it = mp.lower_bound(6);
    cout << "chave6o limite inferior é ";
    cout << (*it);
    
    return 0;
}

Saída:

o elemento é: 
1
2
4
5
chave2o limite inferior é 2
chave3o limite inferior é 4
chave6o limite inferior é 4

No exemplo acima, quando tentamos encontrar o limite inferior de um valor fora do container, ou seja, quando não existe o valor no container set, ele retornará ao end.

C++ Set (Conjunto) STL