将vector <vector <string >>转换为map <string,string =“”> c ++时奇怪的第一个元素

时间:2019-01-22 01:50:12

标签: c++ dictionary vector

我正在尝试将像这样的向量[["foo=bar+1", "foo=foo/2", "foo=foo-foo"]]转换成这样的地图{"foo": "bar+1", "foo": "foo/2", "foo": "foo-foo"}。到目前为止,我有以下代码:

string currentBankSetting;
for (int i = 0; i < bankContenseVector.size(); i++) {
    for (int j = 0; j < bankContenseVector[i].size(); j++) {
        currentBankSetting = bankContenseVector[i][j];
        vector<string> keyValue = fixCSGNUtils.split(currentBankSetting, "=");
        scriptVars.insert(pair<string, string>(keyValue[0], keyValue[1])); 
    }
}

// This is just to read out scriptVars
for (auto it = scriptVars.cbegin(); it != scriptVars.cend(); ++it) {
    cout << (*it).first << ": " << (*it).second << endl;
}

在这种情况下,银行竞争向量为:[["ef=e-fz", "ei=nf*pt", "go=og+le"]]。输出为奇数。是:

: map...? <- This element
ef: e-fz
ei: nf*pt
go: og+le

所以我的问题是:字典中的第一个元素是如何出现的,我该如何停止发生?我不想删除它,因为它看起来不太好(我知道)...

1 个答案:

答案 0 :(得分:1)

如果不知道fixCSGNUtils.split()在做什么,就很难知道出了什么问题。很难知道地图上是否确实有一个额外的条目,或者第一个条目的格式是否很奇怪,或者这仅仅是您使用的编辑器的功能。

无论如何,下面是一个有效的示例,其中大部分代码都完整无缺,并且/或者被标准库函数所替代。输出如下:

ef:e-fz
ei:nf * pt
转到:og + le

using namespace std;

int main() {
    map<string, string> mp;
    vector<vector<string>> a;
    vector<string> b = {"ef=e-fz", "ei=nf*pt", "go=og+le"};
    a.push_back(b);

    string c;
    for (int i = 0; i < a.size(); i++) {
        for (int j = 0; j < a[i].size(); j++) {
            c = a[i][j];
            size_t pos = c.find("=");
            string key = c.substr(0, pos);
            string remainder = c.substr(pos+1, c.length());
            mp.insert(pair<string, string>(key, remainder));
        }
    }

    for (auto it = mp.cbegin(); it != mp.cend(); ++it) {
        cout << (*it).first << ": " << (*it).second << endl;
    }

return 0;
}