English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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.
val:O valor a ser pesquisado no contêiner de conjunto.
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.
Tamanho em logaritmo.
Nenhuma alteração.
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.
Se ocorrer uma exceção, o contêiner não será alterado.
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.
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。
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.
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