gpt4 book ai didi

c++ - 无序集,是否值得在插入前调用查找?

转载 作者:太空狗 更新时间:2023-10-29 21:00:06 27 4
gpt4 key购买 nike

当向 std::unorder_set 中插入元素时,是否值得在 std::unordered_set::insert 之前调用 std::unordered_set::find?根据我的理解,我应该总是只调用插入,因为它返回一个 std::pair,其中包含一个 bool 值,指示插入是否成功。

最佳答案

insert 之前调用 find 本质上是一种反模式,通常在设计不佳的自定义集实现中观察到。也就是说,在不告诉调用者插入是否实际发生的实现中可能有必要。 std::set 确实为您提供了此信息,这意味着通常没有必要执行此插入前查找 舞蹈。

insert 的典型实现通常包含 find 的完整实现,这意味着 find-before-insert 方法执行搜索两次毫无意义的原因。

但是,std::set 设计的一些其他缺点有时确实需要一个插入前查找 序列。例如,如果您的集合元素包含一些需要修改的字段,如果(仅当)实际插入发生。例如,您可能必须为某些指针字段分配“永久”内存,而不是这些字段在插入之前指向的“临时”(本地)内存。不幸的是, 插入之后这是不可能的,因为 std::set 只为您提供对其元素的非修改访问。一种解决方法是先执行 find,从而“预测”是否会发生实际插入,然后相应地设置新元素(例如为所有字段分配“永久”内存) 执行插入。从性能的角度来看这很丑陋,但在非性能关键代码中是可以接受的。这就是标准容器的情况。

关于c++ - 无序集,是否值得在插入前调用查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23002358/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com