如何实现std :: unordered_map :: insert_or_assign方法?
文档:https://en.cppreference.com/w/cpp/container/unordered_map/insert_or_assign
参数:
k -用于查找和插入的键
提示 -迭代到新元素将在其之前的位置 插入
obj -要插入或分配的值
我对应该是什么提示感到困惑?
我使用Coord类创建了无序地图came_from。 (我相信这里的Coord类是不相关的,但是如果您发现有必要,请注释,然后我将显示代码)。在这种情况下,提示参数应该是什么?
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);
答案 0 :(得分:1)
hint
有助于将查找与插入分开。它通常与lower_bound
一起使用。
lower_bound
返回一个迭代器,该迭代器指向[first,last)范围内不小于(即大于或等于)值的第一个元素,或者如果找不到这样的元素,则返回last。
这意味着如果键已经存在于映射中,则无论键是否存在,它都会返回迭代器所在的位置。
因此hint
对订购 map
很有用。尽管unordered_map
也具有此功能,但是由于找不到有用的hint
,因此无法有效使用它。
因此,如果使用unordered_map
,则可以将begin()
或end()
迭代器用作hint
。
或者就像@Caleth提到的那样,您可以只使用不需要hint
的重载。