当我循环使用基于循环的循环两次的std :: unordered_map时,顺序是否保证相等?
std::unordered_map<std::string,std::string> map; std::string query = "INSERT INTO table ("; bool first = true; for(auto i : map) { if(first) first = false; else query += ","; query += i.first; } query += ") "; query += "VALUES ("; first = true; for(auto i : map) { if(first) first = false; else query += ","; query += i.second; } query += ");"
在上面的示例中,生成的字符串应该是这种形式.因此,重要的是,两个时代,迭代的顺序是一样的.
INSERT INTO table (key1,key2,key3) VALUES (value1,value2,value3);
这是否保证在C?
解决方法
无序关联容器的迭代次序只能在由于突变操作而进行重新排列时改变(如C 11 23.2.5 / 8中所述).您不是在迭代之间修改容器,所以顺序不会改变.
虽然该规范没有明确地声明在任何其他时间都不会发生重新散列,但这样做会使所有的迭代器无效,使得任何迭代都是不可能的.