【发布时间】:2019-05-27 14:23:50
【问题描述】:
我想遍历一个映射,该地址存储在一个指针中,所以我可以访问和修改原始映射,但是每当我尝试迭代时,它总是给我一个读取访问冲突。
#include <map>
template<typename A, typename B>
class map_array_util
{
public:
map_array_util(std::map<A,B> _m)
{
m = &_m;
}
void copy(B *arr, int size)
{
}
bool equals(B *arr, int size) const
{
int i = 0;
for (auto it = (*m).begin(); it != (*m).end(); ++it)
{
std::pair<A, B> p = *it;
if (*(arr + i) != p.second)
{
return false;
}
i++;
}
return true;
}
private:
std::map<A, B> *m;
};
我们如何以正确的方式进行迭代?
【问题讨论】:
-
map_array_util(std::map<A,B>& _m)而不是map_array_util(std::map<A,B> _m)然后您必须确保在调用map_array_util后,您的地图不会从堆栈中删除,或者您将地图存储在哪里。顺便提一句。这不是好的做法。 -
(*ptr).mbr是->运算符的含义:ptr->mbr。 -
顺便说一句:
bool equals(B *arr, int size) const {return std::equal(arr, arr + size(), m->begin(), m->end(), [](const B& b, const auto& p){ return b == p.second; });}