gpt4 book ai didi

c++ - emplace(std::move(key), std::move(value)) vs emplace(std::make_pair(key, value))

转载 作者:太空狗 更新时间:2023-10-29 21:36:19 24 4
gpt4 key购买 nike

两种放置方式:

std::unordered_map<std::string, std::string> m;

首先:放置移动的键和值

// 1.
{
std::string k1 = "key1";
std::string v1 = "value1";
m.emplace(std::move(k1), std::move(v1));
}

第二个:用 pair 放置我的 std::make_pair:

// 2.
{
std::string k2 = "key2";
std::string v2 = "value2";
m.emplace(std::make_pair(k2, v2));
}

哪个更好(意味着速度效率更高)?

最佳答案

Which is better?

如何更好?它们不等同。

示例 1 为 k1v1 调用移动构造函数,使它们处于有效但不同的状态,它们的内容将被移走。如果您打算之后使用 k1v1 则别无选择,您应该使用 #2。如果你不这样做,那么你也应该移动到 #2 以避免复制:

m.emplace(std::make_pair(std::move(k2), std::move(v2)));

然后将其留给可读性:

m.emplace(std::move(k1), std::move(k2));

这调用 std::pair 的模板构造函数从 2 个右值引用构造一个 std::pair

对比

m.emplace(std::make_pair(std::move(k2), std::move(v2)));

这会调用 std::pair 的移动构造函数,因为它是一个右值。

如果“哪个更好?”是指性能,那么只有一种方法可以找出答案,即基准测试。虽然我认为 m.emplace(std::move(k1), std::move(k2)); 有一点优势。 (如评论中所述,因为它避免了从非常量到常量的转换)


要点,别着急,它们都非常高效,因为它们都在移动。选择您认为更具可读性的那个。

关于c++ - emplace(std::move(key), std::move(value)) vs emplace(std::make_pair(key, value)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40841174/

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