gpt4 book ai didi

c++ - 复制类中定义的 std::map 时出错

转载 作者:行者123 更新时间:2023-11-28 03:38:39 32 4
gpt4 key购买 nike

我有一个用 std::map 用作容器的类。我想添加一个函数来复制两个对象之间的映射。由于映射被声明为类的私有(private)成员,因此我需要一个友元函数来执行此操作。这是我的代码:

class Data;
void copyData(Data &, Data &);

class Data
{
private:
map<int, int> _data;

public:
friend void copyData(Data &, Data&);
};

void copyData(Data &a, Data &b)
{
std::copy(a._data.begin(), a._data.end(), b._data.begin());
}

main()
{
// initialization here
Data A, B;
copyData(A, B);
}

但是用mingw32编译的时候出现了很多warnings。我该如何正确执行此操作?

最佳答案

std::map<K,V>::value_type定义为 std::pair<const K,V> .这确保了 std::map<K,V>::iterator对象不能用于分配给键(否则您可以使用它来破坏容器不变量)。

这意味着 map 迭代器不满足 OutputIterator概念要求,您不能将它们用作 std::copy() 的第三个参数功能。同样,有很多情况无论如何都会导致此代码中断,例如一张 map 的关联比另一张 map 多。

此外,还有一种更简单的方法来编写您的函数:

void copyData(Data &a, Data &b)
{
b._data = a._data;
}

关于c++ - 复制类中定义的 std::map 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10051745/

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