是否有更有效的存储方式 vector<vector<string>> ? C++

Is there a more efficient way for storing vector<vector<string>> ? C++

我读到的真实文件大约是15.000 kBs。因此我不确定这是否是存储这种数据结构的最佳方式。

这是代码。

string line;
ifstream File;
vector<vector<string>> v;
string filename = "meddra.txt";
File.open(filename);

if (File.is_open()) {
    while (getline(File, line)) {
        stringstream ss(line);
        vector<string> row;
        while (getline(ss, line, ',')) {
            row.push_back(line);
        }
        v.push_back(row);
    }
}

这是示例文本文件:

CID100000085,CID000010917,C0000729,Abdominal cramps CID100000085,CID000010917,C0000737,Abdominal pain CID100000085,CID000010917,C0002418,Amblyopia CID100000085,CID000010917,C0002871,Anaemia CID100000085,CID000010917,C0003123,Anorexia

感谢您的贡献。

您正在修改空向量

vector<vector<string>> v;
v[c][j].push_back(line);

相反,您应该使用 vector<string>

v.push_back

您定义了一个向量的向量,如下所示:

vector<vector<string> v

那么如果你分析下面的指令:

v[c][j].push_back(line);

那么你正在调用一个 push_back(line) 方法到一个字符串中。

v 是一个包含字符串向量的向量

v[i] 是索引 i

处的字符串向量

v[i][j] 是索引 j 处的字符串,索引 i[ 处的向量=33=]

这就是错误的原因

您需要使用 v[c][j] = line; 而不是 v[c][j].push_back(line);v[c][j] returns 一个 mutable ref 类型的字符串。但是 string 没有 push_back() 方法。

并且由于 v[c][j] 是一个 mutable ref 它可以分配给一个新值。