c++ - C ++从指针遍历映射
问题描述
我想遍历一个映射,该地址存储在一个指针中,所以我可以访问和修改原始映射,但是每当我尝试迭代时,它总是给我一个读取访问冲突。
#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)
{
m = &_m;
}
所以你有悬空指针。
您可能希望通过引用传递:
map_array_util(std::map<A,B>& _m) : m(&_m) {}
推荐阅读
- python - 使用索引的数组内的numpy ndarray
- java - 基本身份验证请求应该是 POST 还是 GET?
- python - 创建具有特定预定义元素排序的一维 numpy 数组
- go - 是否所有 Go 函数都返回 err 作为第二个返回值?
- sql - 必须为 spark 中的标量子查询聚合相关标量变量
- java - HHH000342:无法获取到查询元数据的连接:null
- sphinx - 在 Sphinx 搜索中,按排名和字段排序如何相互关联?
- c++ - 使用 g++-8 编译时找不到 boost/asio/io_context.hpp
- jquery - Boostrap 验证:不验证像 .00 这样的十进制值
- javascript - 如何更好地改变固定元素的位置