申请堆内存是赋值不行吗,还有往map里存储时会出错,求告知


#include 
#include 
#include 
#include 
using namespace std;

class V
{
    public:
        int value;
        V* head;
        V()
        {
            this->value=0;
            head=this;
        }
};
class unionfindset
{
    public:
    map>*elementmap;
    map,vector>*fathermap;
    map,int>*sizemap;
    unionfindset(list list1)
    {
        elementmap=new map>();
        fathermap=new map,vector>();
        sizemap=new map,int>();
        for(V value:  list1)
        {
            vectorelement=*(new vector(value));
            elementmap->insert(make_pair(value,*element));
        }
    }
    
};
int main(int argc, char** argv)
{
    
    return 0;
}

该回答引用ChatGPT

申请堆内存时需要使用 new 关键字进行动态分配,然后再将指针赋值给相应的变量。例如,elementmap 变量应该是 map<V,vector>* 类型的指针,因此在构造函数中应该使用 new 关键字进行动态分配:

elementmap = new map<V,vector<V>>();

在 elementmap->insert(make_pair(value,*element)) 这一行代码中,make_pair 的第二个参数应该是一个 vector 类型的变量,而不是指针。应该将该行代码改为:

vector<V> element = vector<V>({value});
elementmap->insert(make_pair(value, element));

改动后的 unionfindset 类的构造函数如下:


unionfindset(list<V> list1) {
    elementmap = new map<V,vector<V>>();
    fathermap = new map<vector<V>,vector<V>>();
    sizemap = new map<vector<V>,int>();
    for (V value: list1) {
        vector<V> element = vector<V>({value});
        elementmap->insert(make_pair(value, element));
    }
}

希望这可以帮助到你