C++ 混乱的std::映射插入行为
在向映射中插入值时,我会出现一些奇怪的行为:我总是在映射的末尾插入值,但有时条目会出现混乱 如果我做了一个直接测试,那么我就不会有问题-数字的顺序是正确的:C++ 混乱的std::映射插入行为,c++,insert,map,C++,Insert,Map,在向映射中插入值时,我会出现一些奇怪的行为:我总是在映射的末尾插入值,但有时条目会出现混乱 如果我做了一个直接测试,那么我就不会有问题-数字的顺序是正确的: 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)); } m
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));
}
map-testMap;
对于(int i=0;i<100;++i)
{
//这里所有的东西都订对了
insert(testMap.end(),pair(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;
}
const字符串输入\u TWO=
“=VAR STRING1\“MYSTRING\”\n\
=VAR STRING2 \“示例\”\n\
=变量编号12345\n\
=变量编号23456\n\
=VAR DUMMY 1111\n“;
常量字符串VAL_string=“VAR”;
向量解析_字段(常量字符串和输入)
{
地图领域地图;
向量序列域;
矢量线=分割(输入“\n”);
对于(size_t i=0;i
为供参考,我已将所有附加代码粘贴到一个文件中
有人知道为什么会发生这种情况吗?A
std::map
是一个有序的容器,这使它能够进行查找。如果需要映射和列表,请考虑使用. 贴图不是天生有序的。从概念上讲,它们表示键值对。但是C++ <代码> STD::MAP< /Cord>映射是内部排序的。看见因此,条目将有效地按键值排序
如果需要自己排序,应该使用元组列表。或者一个
无序映射
,如果您有(请参阅;散列映射
,可能在您的平台上提供)。或者在检索结果时对结果进行排序。GMan,我刚刚想到了这一点,我正要将int映射从100反转为0,而不是从0反转为100。。。所以现在一切都有意义了。