c++ - Is for(auto i : unordered_map) guaranteed to have the same order every time? -


when iterate on std::unordered_map range based loop twice, order guaranteed equal?

std::unordered_map<std::string, std::string> map;  std::string query = "insert table ("; bool first = true; for(auto : map) {     if(first) first = false;     else query += ", ";     query += i.first; } query += ") ";  query += "values ("; first = true; for(auto : map) {     if(first) first = false;     else query += ", ";     query += i.second; } query += ");" 

in example above, resulting string should in form. therefore, important both times, order of iteration same.

insert table (key1, key2, key3) values (value1, value2, value3); 

is guaranteed in c++?

the iteration order of unordered associative containers can change when rehashing result of mutating operation (as described in c++11 23.2.5/8). not modifying container between iterations, order not change.

although specification doesn't explicitly state rehashing can't occur @ other time, doing invalidate iterators on container, making iteration @ impossible.


Popular posts from this blog

php - How should I create my API for mobile applications (Needs Authentication) -

5 Reasons to Blog Anonymously (and 5 Reasons Not To)

Google AdWords and AdSense - A Dynamic Small Business Marketing Duo