Biblioteca de algoritmos C ++ - função equal_range ()

Descrição

A função C ++ std::algorithm::equal_range()retorna um intervalo de elemento que corresponde a uma chave específica. Ele usa a função de comparação binária para comparação. O elemento do intervalo deve estar em ordem de classificação.

Declaração

A seguir está a declaração do cabeçalho da função std :: algorithm :: equal_range () std :: algorithm.

C ++ 98

template <class ForwardIterator, class T, class Compare>
pair<ForwardIterator,ForwardIterator>
equal_range (ForwardIterator first, ForwardIterator last,const T& val, Compare comp);

Parâmetros

  • first - Encaminhe o iterador para a posição inicial.

  • last - Encaminhe o iterador para a posição final.

  • val - Valor para comparar os elementos.

  • comp - Uma função binária que aceita dois argumentos e retorna um bool.

Valor de retorno

Retorna um subintervalo se o elemento for encontrado. Se val não for equivalente a nenhum valor no intervalo, o subintervalo retornado terá um comprimento de zero, com ambos os iteradores apontando para o valor mais próximo maior que val , se houver, ou para o último, se val comparar maior que todos os elementos no alcance.

Exceções

Lança exceção se a comparação de elemento ou uma operação em um iterador lança exceção.

Observe que os parâmetros inválidos causam um comportamento indefinido.

Complexidade de tempo

Aproximadamente 2 * log2 (n) +1 elemento.

Exemplo

O exemplo a seguir mostra o uso da função std :: algorithm :: equal_range ().

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

bool binary_pred(int a, int b) {
   return (a > b);
}

int main(void) {
   vector<int> v = {2, 2, 2, 1, 1};
   int cnt = 0;

   auto range = equal_range(v.begin(), v.end(), 2, binary_pred);

   for (auto it = range.first; it != range.second; ++it)
      ++cnt;

   cout << "Element 2 occurs " << cnt << " times." << endl;

   return 0;
}

Vamos compilar e executar o programa acima, isso produzirá o seguinte resultado -

Element 2 occurs 3 times.