Dal punto di vista delle specifiche e della standardizzazione, una tabella hash è un po 'più complessa di un albero.
Per i contenitori basati su albero (ordinati), lo standard deve solo specificare che per memorizzare un oggetto, devi essere in grado di assegnarlo, copiarlo e confrontarlo 1 . Tutti questi sono già concetti ben definiti, e molti tipi integrati li soddisfano (l'unica ovvia eccezione sono i NaN a virgola mobile, che non soddisfano un severo ordinamento debole).
Per l'hashing, è necessario specificare (almeno) un certo tipo di hashing. Questo, a sua volta, richiedeva più infrastrutture, come std::hash
, con specializzazioni per tutti i tipi built-in. Nel caso di std::unordered_*
, significa anche un po 'di specifiche extra intorno agli iteratori, aggiungendo gli iteratori locali a un bucket ai normali iteratori usati per tutto il resto.
1. sì, entra in un piccolo più dettaglio, come richiedere che il confronto soddisfi un severo ordinamento debole, ma anche questo è abbastanza semplice.