Spesso è illuminante per cercare la proposta che introduce un elemento, in quanto v'è spesso una logica di accompagnamento. In questo caso N1443 dice questo:
G. benna interfaccia
Come tutti i contenitori standard, ognuno dei contenitori hash ha funzione membro iniziare() e di fine(). L'intervallo [c.begin(), c.end()) contiene tutti gli elementi nel contenitore, presentati come intervallo piatto. elementi all'interno di un secchio sono adiacenti, ma l'interfaccia iteratore presenta nessuna informazione riguardo un secchio e il successivo comincia.
È anche utile per esporre la struttura secchio, per due motivi. In primo luogo, consente agli utenti di valutare l'efficacia della loro funzione hash : consente loro di testare la distribuzione uniforme degli elementi all'interno dei bucket e di controllare gli elementi all'interno di un bucket per vedere se hanno proprietà comuni. In secondo luogo, se gli iteratori hanno una struttura segmentata sottostante (come nelle esistenti implementazioni di elenchi con collegamento ), gli algoritmi che sfruttano tale struttura, con un ciclo nidificato esplicito , possono essere più efficienti degli algoritmi che visualizzano gli elementi come gamma piatta.
La parte più importante dell'interfaccia del bucket è un sovraccarico di begin() e end(). Se n è un numero intero, [begin (n), end (n)) è un intervallo di iteratori che puntano agli elementi nell'nimo bucket. Queste funzioni membro restituiscono iteratori, ovviamente, ma non di tipo X :: iterator o X :: const_iterator. Invece restituiscono iteratori di tipo X :: local_iterator o X :: const_local_iterator. Un iteratore locale è in grado di eseguire all'interno di un bucket, ma non necessariamente tra bucket; in alcune implementazioni è possibile per X :: local_iterator di essere una struttura di dati semplice di X :: iterator. X :: iterator e X: local_iterator può essere dello stesso tipo; le implementazioni che utilizzano elenchi doppiamente collegati probabilmente trarranno vantaggio dalla libertà di .
Questa interfaccia bucket non è fornita dalle implementazioni MetroWork SGI, Dinkumware o . Si ispira in parte dall'interfaccia collisione rilevamento Metrowerks , e in parte da lavori precedenti (vedi [Austern 1998]) su algoritmi per contenitori segmentati.
_ "e ha scoperto che esiste un'interfaccia per accedere ai bucket sotto' std :: unordered_map'. "_ Si prega di approfondire questo probabilmente specifico dettaglio di implementazione nella domanda. –
@ πάνταῥεῖ naw, non è specifico per l'implementazione. L'interfaccia standard di 'std :: unordered_map' espone questo dettaglio di implementazione. È orribile. –
@ πάνταῥεῖ: fa parte della [libreria standard] (http://en.cppreference.com/w/cpp/container/unordered_map/begin2). –