Namespaces
Variants

std::unordered_map<Key,T,Hash,KeyEqual,Allocator>:: end, std::unordered_map<Key,T,Hash,KeyEqual,Allocator>:: cend

From cppreference.net

iterator end ( ) noexcept ;
(1) (начиная с C++11)
(constexpr начиная с C++26)
const_iterator end ( ) const noexcept ;
(2) (начиная с C++11)
(constexpr начиная с C++26)
const_iterator cend ( ) const noexcept ;
(3) (начиная с C++11)
(constexpr начиная с C++26)

Возвращает итератор за последним элементом * this .

Этот возвращённый итератор действует только как sentinel. Не гарантируется, что он будет dereferenceable .

range-begin-end.svg

Содержание

Возвращаемое значение

Итератор за последним элементом.

Сложность

Константа.

Пример

#include <cmath>
#include <iostream>
#include <unordered_map>
struct Node { double x, y; };
int main()
{
    Node nodes[3] = {{1, 0}, {2, 0}, {3, 0}};
    // mag - это отображение, связывающее адрес Node с его величиной на плоскости
    std::unordered_map<Node*, double> mag =
    {
        { nodes + 0, 1 },
        { nodes + 1, 2 },
        { nodes + 2, 3 }
    };
    // Изменяем каждую y-координату с 0 на величину
    for (auto iter = mag.begin(); iter != mag.end(); ++iter)
    {
        auto cur = iter->first; // указатель на Node
        cur->y = mag[cur]; // можно было также использовать cur->y = iter->second;
    }
    // Обновляем и выводим величину каждого узла
    for (auto iter = mag.begin(); iter != mag.end(); ++iter)
    {
        auto cur = iter->first;
        mag[cur] = std::hypot(cur->x, cur->y);
        std::cout << "Величина (" << cur->x << ", " << cur->y << ") равна ";
        std::cout << iter->second << '\n';
    }
    // Повторяем вышеуказанное с использованием цикла for на основе диапазона
    for (auto i : mag)
    {
        auto cur = i.first;
        cur->y = i.second;
        mag[cur] = std::hypot(cur->x, cur->y);
        std::cout << "Величина (" << cur->x << ", " << cur->y << ") равна ";
        std::cout << mag[cur] << '\n';
        // В отличие от std::cout << iter->second << '\n'; выше,
        // std::cout << i.second << '\n'; НЕ выведет обновленную величину
    }
}

Возможный вывод:

Величина (3, 3) равна 4.24264
Величина (1, 1) равна 1.41421
Величина (2, 2) равна 2.82843
Величина (3, 4.24264) равна 5.19615
Величина (1, 1.41421) равна 1.73205
Величина (2, 2.82843) равна 3.4641

Смотрите также

возвращает итератор на начало
(public member function)
(C++11) (C++14)
возвращает итератор на конец контейнера или массива
(function template)