Specificare il numero minimo di secchi quando si costruisce una spinta :: unordered_map

StackOverflow https://stackoverflow.com/questions/694572

  •  22-08-2019
  •  | 
  •  

Domanda

Sto cercando di usare boost :: unordered_map di memorizzare nella cache alcuni valori. Cerco di specificare il numero minimo di secchi nel costruttore:

#include <boost/unordered_map.hpp>
typedef boost::unordered_map<float, float> Mycache;
Mycache cache((std::size_t)25165843,
              boost::hash<float>(),
              std::equal_to<float>(),
              std::allocator<std::pair<float const, float> >());

Ma quando ho visualizzare le informazioni sulla mia unordered_map alla fine del programma di:

g ++:

unordered_map.size(): 15861612
unordered_map.load_factor: 10.0845
unordered_map.bucket_count: 1572869
unordered_map.max_size: 1572868
unordered_map.max_load_factor: 1
unordered_map.max_bucket_count: 1572869

VC ++:

unordered_map.size(): 13916119
unordered_map.load_factor: 8.8476
unordered_map.bucket_count: 1572869
unordered_map.max_size: 1572868
unordered_map.max_load_factor: 1
unordered_map.max_bucket_count: 1572869

Come faccio a specificare il numero minimo di secchi?

È stato utile?

Soluzione

boost::unordered_map::max_bucket_count() restituisce il limite di implementazione-dipendente sul conteggio secchio di un unordered_map. Sembra che tu abbia superato questo limite con il parametro del costruttore. Si noti che mentre MSDN definisce questo per essere i secchi max "attualmente" consentiti (qualunque cosa significhi), le specifiche C ++ 0x definisce per essere il più secchi della mappa può mai avere.

Non ho mai usato la classe, e non riesco a vedere nulla nel progetto di C ++ 0x spec per spiegare il motivo per cui il costruttore è in silenzio la creazione di un oggetto che non fa quello che hai detto a.

anche io non so quale sia la motivazione potrebbe essere dietro l'1572869 valore, diverso da quello che è un primo largeish.

Altri suggerimenti

L'altra risposta è corretta sullo standard, ma il piccolo max_bucket_count è in realtà un bug in Boost 1.38, qualsiasi altra versione vi permetterà di utilizzare più secchi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top