【问题标题】:Is there a more efficient way for storing vector<vector<string>> ? C++有没有更有效的方法来存储 vector<vector<string>> ? C++
【发布时间】:2021-02-23 08:43:31
【问题描述】:

我阅读的真实文件大约是 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,腹部绞痛 CID100000085,CID000010917,C0000737,腹痛 CID100000085,CID000010917,C0002418,弱视 CID100000085,CID000010917,C0002871,贫血 CID100000085,CID000010917,C0003123,厌食症

感谢您的贡献。

【问题讨论】:

  • v 的类型为vector&lt;vector&lt;string&gt;&gt;,那么v[c] 的类型为vector&lt;string&gt;。因此v[c][j] 的类型为string
  • 你忘记push_back 到v

标签: c++ file vector ifstream push-back


【解决方案1】:

你正在修改一个空向量

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

相反,您应该使用vector&lt;string&gt; 执行v.push_back

【讨论】:

    【解决方案2】:

    你已经定义了一个这样的向量:

    vector<vector<string> v
    

    那么如果你分析以下指令:

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

    然后你将push_back(line) 方法调用到一个字符串中。

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

    v[i] 是索引 i

    处的字符串向量

    v[i][j] 是索引 i

    向量的索引 j 处的字符串

    这就是错误的原因

    【讨论】:

      【解决方案3】:

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

      由于v[c][j]mutable ref,因此可以将其分配给新值。

      【讨论】:

        猜你喜欢
        • 2015-01-31
        • 2012-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-24
        相关资源
        最近更新 更多