首页 > 解决方案 > 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;
};

我们如何以正确的方式进行迭代?

标签: c++pointersstdmap

解决方案


您存储本地副本的地址

map_array_util(std::map<A,B> _m)
{
    m = &_m;
}

所以你有悬空指针。

您可能希望通过引用传递:

map_array_util(std::map<A,B>& _m) : m(&_m) {}

推荐阅读