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

Posted

技术标签:

【中文标题】将 vector<vector<string>> 转换为 map<string, string> c++ 时奇怪的第一个元素【英文标题】:Weird first element when converting vector<vector<string>> to map<string, string> c++ 【发布时间】:2019-01-22 01:50:12 【问题描述】:

我正在尝试将类似这样的矢量转换为:[["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】:

如果不知道 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;

【讨论】:

以上是关于将 vector<vector<string>> 转换为 map<string, string> c++ 时奇怪的第一个元素的主要内容,如果未能解决你的问题,请参考以下文章

回溯算法

将 Mat 转换为 <vector<vector>> C++

C++如何将string按空格分割?

参数解析

关于将vector元素复制到数组

将 stl 算法应用于多维向量 (vector<vector<T> >)