当我循环使用基于循环的循环两次的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中所述).您不是在迭代之间修改容器,所以顺序不会改变.
虽然该规范没有明确地声明在任何其他时间都不会发生重新散列,但这样做会使所有的迭代器无效,使得任何迭代都是不可能的.
原文地址:https://www.jb51.cc/c/113950.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。