Странный первый элемент при преобразовании вектора <vector <string>> в карту <string, string> c ++ - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь преобразовать такой вектор, который может выглядеть следующим образом: [["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 голосов
/ 22 января 2019

Трудно понять, что происходит, не зная, что делает fixCSGNUtils.split (). Также сложно узнать, есть ли на карте дополнительная запись, или просто отформатирована первая запись, или это просто особенность используемого вами редактора.

Несмотря на это, ниже приведен рабочий пример, в котором большая часть кода не повреждена и / или заменена стандартными библиотечными функциями. Будет выведено следующее:

ef: e-fz
ei: nf * pt
go: 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...