【问题标题】:How to use std::unordered_map::insert_or_assign如何使用 std::unordered_map::insert_or_assign
【发布时间】:2019-02-18 04:10:09
【问题描述】:

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

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

参数:

k - 用于查找和插入(如果未找到)的键

hint - 指向新元素所在位置的迭代器 插入

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);

【问题讨论】:

    标签: c++ c++11


    【解决方案1】:

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

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

    这意味着它返回迭代器,如果它已经存在于映射中,则不管它是否存在。

    所以hint 对于有序 map 很有用。虽然unordered_map也有这个功能,但是因为找不到有用的hint所以不能有效使用。

    所以对于unordered_map,您可以使用begin()end() 迭代器作为hint

    或者正如@Caleth 提到的,您可以只使用不采用hint 的重载。

    【讨论】:

    • 与其给出无意义的提示,还可以调用不需要的重载。
    • @Caleth:用您的输入更新了答案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 2021-05-30
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    相关资源
    最近更新 更多