gpt4 book ai didi

C++ - 直接插入 std::map 而不使用赋值运算符

转载 作者:搜寻专家 更新时间:2023-10-31 01:01:41 24 4
gpt4 key购买 nike

我有一个 std::map,我想将一个对象插入其中,但我想避免不必要的复制,因为它是一个大对象,复制需要时间。我试过这个:

MyPODType data(otherData);
data.modify();
myMap["Some key"] = data;

但是这需要 2 个拷贝:一个复制 otherData,另一个在赋值运算符中插入对象。由于是 POD,复制构造函数和赋值运算符都是默认的。

我怎样才能只用一份呢?我知道有些编译器会优化第二个拷贝,但我想以一种可移植的方式进行优化。

最佳答案

(我假设 MyPODType 是您的 map 的确切 value_type)

正如 Igor Tandetnik 在评论中指出的那样,从 C++11 开始,您可以编写:

myMap.emplace("Some key", otherData);

然后您可以在 map 中的值上调用 modify()

emplace 函数将使用完美转发 将您的参数分别转发给键和值的构造函数,而不必创建临时的 std: :pair 或默认构造一个值。

也可以使用insert:

std::pair<KeyType, MyPODType> p = { "Some key ", otherData };
p.second.modify();
myMap.insert( std::move(p) );

尽管 emplace 选项看起来更简单。

关于C++ - 直接插入 std::map 而不使用赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28598239/

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