std::unorde...equal_range(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

πŸ’– std::unordered_multiset::equal_range πŸ’–

okay so this is from the C++ Standard Libary manual, bestie, and today’s main character is std::unordered_multiset::equal_range. We’re gonna get you from β€œhuh?” to β€œohhh slay” without losing a single detail. 🫢✨

🌸 NAME 🌸

  • std::unordered_multiset::equal_range β€” std::unordered_multiset::equal_range

✨ Synopsis ✨

(1) (since C++11)

std::pair<iterator, iterator> equal_range( const Key& key );

(2) (since C++11)

std::pair<const_iterator, const_iterator> equal_range( const Key& key ) const;

(3) (since C++20)

template< class K >
std::pair<iterator, iterator> equal_range( const K& x );

(4) (since C++20)

template< class K >
std::pair<const_iterator, const_iterator> equal_range( const K& x ) const;

πŸŽ€ Parameters πŸŽ€

  • key β€” key value to compare the elements to.
  • x β€” a value of any type that can be transparently compared with a key.

πŸ¦‹ Return value πŸ¦‹

A std::pair containing a pair of iterators defining the wanted range. If there are no such elements, past-the-end (see end()) iterators are returned as both elements of the pair. πŸ’…

⭐ Complexity ⭐

Average case linear in the number of elements with the key key, worst case linear in the size of the container.

πŸ’… Notes πŸ’…

Feature-test macro tea β˜•:

  • Feature-test macro: __cpp_lib_generic_unordered_lookup
    • Value: 201811L
    • Std: (C++20)
    • Feature: Heterogeneous comparison lookup in unordered associative containers, overloads (3,4)

πŸ“ Example πŸ“

Estimates the characters frequency for given string.

// Run this code

#include <iostream>
#include <iterator>
#include <string>
#include <unordered_set>

int main()
{
    std::string sentence{"cppreference.com"};
    std::cout << "The sentence: " << sentence << '\n';

    std::unordered_multiset<char> sequence;
    for (char x : sentence)
        sequence.insert(x);

    std::cout << "The sequence: { ";
    for (char x : sequence)
        std::cout << x << ' ';

    std::cout << "}\n" "Symbol:Frequency: ";
    for (auto it = sequence.begin(); it != sequence.end();)
    {
        if (auto [first, last] = sequence.equal_range(*it); first != last)
        {
            std::cout << *first << ":" << std::distance(first, last) << "  ";
            it = last;
        }
        else
            ++it;
    }
}

🌈 Possible output 🌈

The sentence: cppreference.com
The sequence: { m o c c c p p r r e e e e f n . }
Symbol:Frequency: m:1  o:1  c:3  p:2  r:2  e:4  f:1  n:1  .:1

πŸ‘‘ See also πŸ‘‘

  • find β€” finds element with specific key (public member function)
  • contains β€” checks if the container contains element with specific key (C++20) (public member function)
  • count β€” returns the number of elements matching specific key (public member function)
  • equal_range β€” returns range of elements matching a specific key (function template)

okay that’s the whole page, bestie πŸ’– β€” cute little footer sign-off: source http://cppreference.com, date 2024.06.10, page std::unorde...equal_range(3). mwah 😘✨

πŸ“¦ where this page comes from