如何使用std :: unordered_map :: insert_or_assign

时间:2019-02-18 04:10:09

标签: c++ c++11

如何实现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);

1 个答案:

答案 0 :(得分:1)

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

lower_bound返回一个迭代器,该迭代器指向[first,last)范围内不小于(即大于或等于)值的第一个元素,或者如果找不到这样的元素,则返回last。

这意味着如果键已经存在于映射中,则无论键是否存在,它都会返回迭代器所在的位置。

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

因此,如果使用unordered_map,则可以将begin()end()迭代器用作hint

或者就像@Caleth提到的那样,您可以只使用不需要hint的重载。