将 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++ 时奇怪的第一个元素的主要内容,如果未能解决你的问题,请参考以下文章