std::unordered_map::end, std::unordered_map::cend
Материал из cppreference.com
iterator end() noexcept; |
(начиная с C++11) | |
const_iterator end() const noexcept; |
(начиная с C++11) | |
const_iterator cend() const noexcept; |
(начиная с C++11) | |
Возвращает итератор на элемент, следующий за последним элементом unordered_map.
Этот элемент существует лишь условно, попытка доступа к нему приведёт к неопределённому поведению.
Параметры
(нет)
Возвращаемое значение
Итератор на элемент, следующий за последним элементом.
Сложность
Константная
Пример
Запустить этот код
#include <cmath>
#include <iostream>
#include <unordered_map>
struct Node { double x, y; };
int main() {
Node nodes[3] = { {1, 0}, {2, 0}, {3, 0} };
// mag - map, сопоставляющий адрес Node к длине вектора на плоскости
std::unordered_map<Node *, double> mag = {
{ nodes, 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(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
См. также
(C++11) |
возвращает итератор на начало (public функция-элемент) |