yuAriellexi 2019-08-12 11:26 采纳率: 100%
浏览 2440
已采纳

c++ map里使用结构体指针作为value

编译时错误

hpp文件:
https://paste.ubuntu.com/p/xBZB8K6s3m/

cpp
https://paste.ubuntu.com/p/WYpRgjTFf2/

不采纳复制粘贴网络链接,答案

#include "messageBox.hpp"
#include <iostream>
//#include <string>
#include <map>
using namespace std;



messageBox::messageBox()
{
    waitNum = 1;
}

void messageBox::receive(int num)
{
    Node* cur = new Node(num);
    headmap.insert(num, cur);
    tailmap.insert(num, cur);

//找到上一个尾节点
    if(tailmap.find(num-1) != tailmap.end())
    {
        tailmap.at(num-1) -> next = cur;
        tailmap.erase(num-1);
        headmap.at(num-1)->next = cur;
        headmap.erase(num);
    }
//找到下一个头节点
    if(headmap.find(num+1) != headmap.end())
    {
        cur -> next = headmap.at(num+1);
        headmap.erase(num+1);
        cur -> next = tailmap.at(num+1);
        tailmap.erase(num+1);
    }
    if(waitNum == num)
    {
        print();
    }
}

void print()
{
    struct Node* tempnode = headmap.at(waitNum);
    headmap.erase(waitNum);
    while(tempnode != NULL)
    {
        cout << tempnode -> index << endl;
        tempnode = tempnode -> next;
        waitNum++;
    }
    tailmap.erase(--waitNum);
}

int main()
{
    messageBox msnbox;
    msnbox.receive(2);
    msnbox.receive(1);
    msnbox.receive(4);
    msnbox.receive(5);
    msnbox.receive(7);
    msnbox.receive(8);
    msnbox.receive(6);
    msnbox.receive(3);
    msnbox.receive(9);
    msnbox.receive(10);
    msnbox.receive(12);
    msnbox.receive(13);
    msnbox.receive(11);
}

#ifndef MESSAGEBOX_HPP
#define MESSAGEBOX_HPP
#include <map>
//#include <string>
using namespace std;



struct Node
{
    int index;
    Node* next;
    Node(int i)
    {
        index = i;
        next = NULL;
    }
};


class messageBox
{
private:
    map<int, Node*> headmap;
    map<int, Node*> tailmap;
    int waitNum;

public:
    messageBox();
    void receive(int num);
    void print();
};
#endif


  • 写回答

2条回答 默认 最新

  • qtchen_1988 2019-08-12 12:10
    关注
    两个地方导致编译不过的。
    1.
    headmap.insert(num, cur);
    tailmap.insert(num, cur);
        --->
    headmap.insert(std::pair<int,Node *>(num,cur));
    tailmap.insert(std::pair<int,Node *>(num,cur));
    
    2.
    void print()
        --->
    void messageBox::print()
    
    虽然编译过了,但你的代码;
    
        if(tailmap.find(num-1) != tailmap.end())
        {
            tailmap.at(num-1) -> next = cur;
            tailmap.erase(num-1);
            headmap.at(num-1)->next = cur;
            headmap.erase(num);
        }
            运行时会导致越界,程序崩溃,你检查一下
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算