c – 为(auto i:unordered_map)保证每次都有相同的顺序?
发布时间:2020-12-16 05:43:02 所属栏目:百科 来源:网络整理
导读:当我循环使用基于循环的循环两次的std :: unordered_map时,顺序是否保证相等? std::unordered_mapstd::string,std::string map;std::string query = "INSERT INTO table (";bool first = true;for(auto i : map){ if(first) first = false; else query += "
当我循环使用基于循环的循环两次的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中所述).您不是在迭代之间修改容器,所以顺序不会改变.
虽然该规范没有明确地声明在任何其他时间都不会发生重新散列,但这样做会使所有的迭代器无效,使得任何迭代都是不可能的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |