Bidirectional iterators in unordered_map?
<p>The following minimal example:</p>

<pre><code>#include &lt;iostream&gt;

#include &lt;boost/unordered_map.hpp&gt;

int main()
{
        boost::unordered_map&lt;int, int&gt; m;
        boost::unordered_map&lt;int, int&gt;::const_iterator i;

        m.insert(std::make_pair(1, 2));

        i = m.end();
        --i;

        std::cout &lt;&lt; i-&gt;first &lt;&lt; " -&gt; " &lt;&lt; i-&gt;second &lt;&lt; std::endl;

        return 0;
}
</code></pre>

<p>...fails to compile.</p>

<pre><code>bidi.cxx: In function ‘int main()’:
bidi.cxx:13: error: no match for ‘operator--’ in ‘--i’
</code></pre>

<p>According to <a href="http://www.boost.org/doc/libs/1_43_0/doc/html/unordered/comparison.html" rel="nofollow">Boost's own documentation</a>:</p>

<blockquote>
  <p><code>iterator</code>, <code>const_iterator</code> are of at least the forward category.</p>
</blockquote>

<p>It would appear that that's all they are. Why? What technical restriction does a hash-map impose that prevents iterators from being bidirectional?</p>

<p>(gcc version 4.1.2, Boost versions 1.40.0 and 1.43.0.)</p>
