当前位置:  开发笔记 > 编程语言 > 正文

为什么没有将元素添加到我的std :: map(C++)

如何解决《为什么没有将元素添加到我的std::map(C++)》经验,为你挑选了1个好方法。

我正在解析一个文件,并希望将一些数据添加到地图中,以便我可以稍后引用它,但我一直在调试,并注意到这些元素没有像我期望的那样添加.如果有人可以指出问题,因为我对C++很新,并且通常使用不同语言的地图.

std::map MaterialParser::parseMaterial(const char * path) {
    std::map materialMap;
    std::pair pair;

    ifstream inFile;

    inFile.open(path);

    if (!inFile.good()) {
        std::cout << "Unable to open material file" << endl;
        return materialMap;
    }

    string materialName;

    while (!inFile.eof()) {

        string line;
        getline(inFile, line);

        if (line.substr(0, 6) == "newmtl") {
            materialName = line.substr(7);
        }
        else if (line.substr(0,3) == "map") {
            string dir = line.substr(7);

            //pair.first = materialName.c_str();
            //pair.second = dir.c_str();
            //materialMap.insert(pair);
            materialMap[materialName.c_str()] = dir.c_str();
        }


    }

    stringstream ss;
    ss << "MaterialData loaded. Size: " << materialMap.size() << endl;
    OutputDebugStringA(ss.str().c_str());

    inFile.close();

    return materialMap;
}

我已经尝试在添加到地图时打印出来,并且在文件结尾时,每次大小只有1时,文件中有多个元素.我打印出数据并正确读取,只是没有添加到地图中.有人可以告诉我为什么好吗?

输出:

Adding material: Body_MiddlePath: assets\textures\plane\Body mid.dds  Size: 1
Adding material: Body_Parts_1  Path: assets\textures\plane\Body Par.dds  Size: 1
Adding material: Parts_11  Path: assets\textures\plane\parts 1.dds  Size: 1
Adding material: Body_rear  Path: assets\textures\plane\body rea.dds Size: 1
Adding material: body_front  Path: assets\textures\plane\body fro.dds Size: 1
Adding material: Wing_Detail  Path: assets\textures\plane\wing det.dds Size: 1
Adding material: Body_Tail  Path: assets\textures\plane\body tai.dds Size: 1
Adding material: Wing_Right  Path: assets\textures\plane\wing rig.dds  Size: 1
Adding material: Wing_Left  Path: assets\textures\plane\wing lef.dds  Size: 1
Adding material: interior_1  Path: assets\textures\plane\interior.dds  Size: 1
Adding material: body_parts_2  Path: assets\textures\plane\Body Par.dds  Size: 1
Adding material: Glass  Path: assets\textures\plane\glass 1.dds  Size: 1

MaterialData已加载.尺寸:1



1> Messa..:

std::map而不是std::map.

问题是,在函数结束时销毁后,您从materialName.c_str()地图中const char *获取并存储到的值只是"未定义" materialName,因此您将const char *使用新值重写已存储在地图中的内存.

另一个问题是它const char *只是一个数字(指向内存的指针),当作为键插入到地图时,它只是作为数字而不是字符串进行比较.因为数字(指针)可能总是相同(在堆栈中的相同位置),所以地图只用一个键填充.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有