将数据读入地图时出现问题

Issue reading data into a map

本文关键字:问题 地图 数据      更新时间:2023-10-16

我不知道为什么我的pull_data函数在调用时崩溃,我将其缩小到"myMap[word]++"行。但是,如果我理解正确,它应该可以工作。就像如果带有键"word"的元素不存在一样,将创建该元素并初始化值。

我的第一个变体是提取 2 个不同的文件,并将数据保存到 2 个不同的地图中。

if (file.is_open()) {
        while (file >> word) {
            myMap[word]++;
        }
        file.close();
    }
    else {
        cout << "Unable to open file.";
    }

但是,我不是从 2 个不同的文件中提取,而是尝试让它读取一个用 | 分隔我需要的所有数据的文件,以指示我是从侧面还是从侧面读取。

#include <iostream>
#include <fstream>
#include <map>
#include <string>
using namespace std;
void pull_data(map<string, float>& myMap1, map<string, float>& myMap2);
void push_data(map<string, float> myMap1, map<string, float> myMap2);
void sync_data(map<string, float>& myMap1, map<string, float>& myMap2);
int main()
{
    map<string, float> offData;
    map<string, float> onData;
    pull_data(offData, onData);
    sync_data(offData, onData);
    push_data(offData, onData);
    system ("PAUSE");
    return 0;
}
void pull_data(map<string, float>& myMap1, map<string, float>& myMap2) {
    string word;
    bool onOff = false;
    ifstream file("Data.txt");
    if (file.is_open()) {
        while (file >> word) {
            if(word == "|" && onOff){
                onOff = false;
            }else if(word == "|"){
                onOff = true;
            }
            if(onOff){
                myMap2[word]++;
            }else{
                myMap1[word]++;
            }
        }
        file.close();
    }
    else {
        cout << "Unable to open file.";
    }
}
void push_data(map<string, float> myMap1, map<string, float> myMap2){}
void sync_data(map<string, float>& myMap1, map<string, float>& myMap2){}

数据.txt示例

362 364 |   112 304 122 124 |
364 304 901 116 |   351 303 112 |
362 364 311 |   351 612 400 484 303 326 |

这是因为您使用的映射数据类型不符合 CopyConstructible 和 DefaultConstructible 的要求,float是一种基元数据类型。

这就是您有一个零引用并且在使用运算符"++"时它崩溃的原因。

检查一下:

http://en.cppreference.com/w/cpp/container/map/operator_at

http://en.cppreference.com/w/cpp/concept/CopyConstructible