我正在尝试将像这样的向量[["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
所以我的问题是:字典中的第一个元素是如何出现的,我该如何停止发生?我不想删除它,因为它看起来不太好(我知道)...
答案 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;
}