为什么没有“map::insert_or_assign”的惰性版本?

Spo*_*man 1 c++ stl

map::insert_or_assign看起来它是为实现缓存而设计的。但如果值构造函数相对昂贵且缓存未命中率接近于零,则它本质上是无用的。

有没有办法以惰性方式使用此函数以避免构造不会使用的值?

Use*_*ess 6

有没有办法以惰性方式使用此函数以避免构造不会使用的值?

始终insert_or_assign使用传递给的值:

  • k 如果容器中已经存在相当于 的键,则分配std::forward<M>(obj)给与mapped_type该键对应的k
  • 如果键不存在,则像通过插入一样插入新值,从value_type(k, std::forward<M>(obj))

您正在寻找的方法是try_emplace,仅当键尚不存在时,它才会从其参数延迟构造一个条目。