title: Order of unordered_map changes on assignment
body: <p>I'm curious about this behaviour. I found that assigning an <code>unordered_map</code> changes the internal order of the unordered map, without any insertion/deletion:</p>
  
  <pre><code>unordered_map&lt;int, string&gt; m1;
  unordered_map&lt;int, string&gt; m2;
  unordered_map&lt;int, string&gt; m3;
  
  m1[2] = "john";
  m1[4] = "sarah";
  m1[1] = "mark";
  
  m2 = m1;
  m3 = m2;
  
  for(auto it = m1.begin(); it != m1.end(); ++it) {
      cout &lt;&lt; it-&gt;second &lt;&lt; " ";
  }
  cout &lt;&lt; endl;
  for(auto it = m2.begin(); it != m2.end(); ++it) {
      cout &lt;&lt; it-&gt;second &lt;&lt; " ";
  }
  cout &lt;&lt; endl;
  for(auto it = m3.begin(); it != m3.end(); ++it) {
      cout &lt;&lt; it-&gt;second &lt;&lt; " ";
  }
  cout &lt;&lt; endl;
  </code></pre>
  
  <p>outputs:</p>
  
  <pre><code>mark sarah john 
  john sarah mark 
  mark sarah john
  </code></pre>
  
  <p>I know that there isn't any specific order maintained on an <code>unordered_map</code> due to the fact that internally is a hash table, so an element insertion can end anywhere and a re-hash will mix it all.</p>
  
  <p>However, here the order is changing just after an assignment. I expected the order to be the same, as I thought it would just copy the underlying storage.</p>
  
  <p>The first explanation I thought was that maybe <code>unordered_map</code> is taking advantage of the copy to re-hash the new map into a more optimal arrangement. However, I tried to repeat an assignment on a new map (m3) from m2 and the order of m2 is not preserved in m3.</p>
  
  <p>Why does assigning the map change the order?</p>
  
  <p>My compiler is Apple LLVM version 8.1.0 (clang-802.0.42)</p>