在将价值观纳入地图时,我有一些奇怪的行为: 我总是在地图末尾插入,但有时这些条目没有秩序。
如果我进行直截了当的检验,那么我就没有问题了——数字是正确的。
map<int,int> testMap;
for(int i = 0; i < 100; ++i)
{
// everything is ordered correctly here
testMap.insert(testMap.end(), pair<int,int>(i,i));
}
但是,当我说话时,我试图以我宣读的同样顺序插入这些价值观时,事情就没有做到:
const string INPUT_TWO =
"=VAR STRING1 "MYSTRING"
=VAR STRING2 "EXAMPLE"
=VAR NUMBER1 12345
=VAR NUMBER2 23456
=VAR DUMMY 1111
";
const string VAL_STRING = "VAR";
vector<pair<string, string>> parse_fields(const string & input)
{
map<string, string> fieldsMap;
vector<pair<string, string>> sequenceFields;
vector<string> lines = split(input,
);
for(size_t i = 0; i < lines.size(); ++i)
{
if(lines[i].find(VAL_STRING)!=string::npos)
{
vector<string> vals = split(lines[i], );
if(vals.size()==3)
{
fieldsMap.insert(fieldsMap.end(), pair<string,string>(vals[1], remove_quotes(vals[2])));
sequenceFields.push_back(pair<string,string>(vals[1], remove_quotes(vals[2])));
}
}
}
// at the end the map looks like:
// "DUMMY", "1111"
// "NUMBER1", "12345"
// "NUMBER2", "23456"
// "STRING1", "MYSTRING"
// "STRING2", "EXAMPLE"
// the vector of pairs looks like:
// "STRING1", "MYSTRING"
// "STRING2", "EXAMPLE"
// "NUMBER1", "12345"
// "NUMBER2", "23456"
// "DUMMY", "1111"
return sequenceFields;
}
在你看来,我已在pastie上接过了所有补充代码。
是否有任何人知道这种情况会发生?