如何使用std :: unordered_map :: insert_or_assign

How to use std::unordered_map::insert_or_assign

本文关键字:insert or assign map unordered 何使用 std      更新时间:2023-10-16

如何实现std :: unordered_map :: insert_or_assign方法?

文档:https://en.cppreference.com/w/cpp/container/unordered_map/insert_or_assign

参数:

提示 - 迭代器到新元素的位置 插入

obj - 插入或分配

的值

我对假设的提示感到困惑?

我创建了一个带有坐标类的无序地图。(我相信这里的坐标类是无关紧要的,但是如果您发现必要,请评论,然后我将显示代码)。在这种情况下,提示参数是什么?

unordered_map<Coord, Coord>& came_from;
Coord start = Coord(0,0);
Coord goal = Coord(1,1);
came_from.insert_or_assign(start, "What is suppose to be here", goal);

hint有助于将查找与插入分开。通常与lower_bound一起使用。

lower_bound返回一个迭代器,指向范围内的第一个元素(第一个,最后)中的第一个元素,该元素不小于(即更大或等于)值,或者如果找不到此类元素,则最后一次。

这意味着它返回迭代器,如果键已经在地图中存在,则该键是否存在,无论是否存在。

因此,hint对于订购 map很有用。尽管unordered_map也具有此功能,但由于无法找到有用的hint,因此无法以有效的方式使用它。

因此,在unordered_map的情况下,您可以将begin()end()迭代器用作hint

或作为@caleth提到的,您可以使用不服用hint的过载。