C 将映射复制到使用STD ::移动的向量

C++ copy map to vector with std::move

本文关键字:STD 移动 向量 映射 复制      更新时间:2023-10-16

我与C 相对新手,这可能是一个愚蠢的问题,但我试图了解rValuelValue参考目前,我想到了:

假设我们有一个地图(来自数据库或其他任何图),我们想将其所有值复制到向量。

void insertItems(std::vector<std::string>& v)
{
    std::map<int, std::string> names = loadFromDb();
    for (auto& kv : names )
    {
        v.push_back(std::move(kv.second));
    }
}

在这里使用std::move是正确的吗?std::string提供了一个移动构造函数,并且(可能不是用于字符串,而是用于较大的对象)移动构造函数比复制构造函数要快得多。我们也知道,我们没有在其他地方使用地图项目,并且一旦离开功能,它们就会超出范围。那我的推定是对的吗?

我看不到我的思想矛盾,但这是一个复杂的话题,我害怕错过一些东西。 P.S。:我认为问题名称不是最好的。如果您有一个更好的人可以随意编辑。

在这里使用std::move是正确的吗?

如果您确定将来将无法访问移动值,是的。


您可能还想使用std::vector::reservev中进行预先分配所需的空间。

v.reserve(v.size() + names.size());

在这里使用std::move是正确的吗?

是的。代码看起来不错。

在您显示的情况下,是的,是可以的,因为您以后不会使用地图或其值。

如果地图不是一个值(例如它是参考),或者您需要以后使用其中的值,则是错误的。