title: Error: hash_map does not name a type
body: <p>I am receiving an error message for not naming a type, as follows: </p>
  
  <p><code>error: ‘hash_map’ does not name a type
  typedef hash_map&lt;const char*,LexUnitX*,MLexUnitFunctions&gt; MLexUnit;</code></p>
  
  <p>The code in question creates a custom <code>hash_map</code> type using a LexUnitX-type struct as shown below: </p>
  
  <pre><code>typedef struct {
      int iLexUnit;                                   // lexical unit unique identifier
      const char *strLexUnit;                     // lexical unit as an array of characters (a word, a syllable, etc.)
      VLexUnit vLexUnitPronunciations;            // alternative pronunciations of the lexical unit
  } LexUnitX;
  </code></pre>
  
  <p>Code for the VLexUnit vector; vector of <code>LexUnit</code>-type pointers</p>
  
  <pre><code>// lexical unit transcription
  typedef struct {
     int iLexUnit;                            // lexical unit id (unique correspondence id &lt;&gt; lexical unit in str format)
     int iLexUnitPron;                        // lexical unit id (unique correspondence id &lt;&gt; lexical unit + pronunciation)
     int iIndex;                              // index of the lexical unit within the lexicon file
     vector&lt;int&gt; vPhones;                 // phonetic transciption 
     unsigned char iPronunciation;        // pronunciation number
     unsigned char iType;                 // standard / filler / sentence delimiter
     float fProbability;                  // pronunciation probability (respect to alternative ones of the same lex unit)
     float fInsertionPenalty;         // penalty for inserting this lexical unit during decoding
  } LexUnit;  
  
  class LexiconManager;
  
  typedef vector&lt;LexUnit*&gt; VLexUnit;
  </code></pre>
  
  <p>and finally the <code>hash_map</code> type to map characters to their corresponding data structure: </p>
  
  <pre><code>// maps lexical units as strings of characters to their corresponding data structure
  #if defined __linux__ || defined __APPLE__ || __MINGW32__
  typedef std::tr1::unordered_map&lt;const char*,LexUnitX*,MLexUnitFunctions,MLexUnitFunctions&gt; MLexUnit;
  #elif _MSC_VER &lt; 1700
  typedef hash_map&lt;const char*,LexUnitX*,MLexUnitFunctions&gt; MLexUnit;
  #else
      #error "unsupported platform"
  #endif
  </code></pre>
  
  <p>I am not sure what exactly I am doing wrong syntatically here to cause the error. </p>