將值插入到地圖中時出現一些奇怪的行爲:我總是插入到地圖的末尾,但有時候這些條目出現亂序。令人困惑的std :: map插入行爲
如果我做一個簡單的測試,然後我沒有得到任何problems-號碼是否正確下令:
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\"\n\
=VAR STRING2 \"EXAMPLE\"\n\
=VAR NUMBER1 12345\n\
=VAR NUMBER2 23456\n\
=VAR DUMMY 1111\n";
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, '\n');
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。
有人知道爲什麼會發生這種情況嗎?
GMan,我剛剛想到了這一點,我正準備將int map從100反轉爲0而不是0到100 ...所以現在這一切都合情合理。 – Kiril 2010-07-10 07:01:57