tracisz czasu na myślenie o map
kontra multimap
. Załóżmy, że liczba pojemników wynosi N, a średnia liczba pozycji na bin wynosi M.
Zazwyczaj używa się drzewa RB z duplikatami kluczy.
- Pobiera O (log n + log M)
- Insert O (log n + log M)
- Usuwanie O (log n + log M)
- iteracji O (1)
A std::map<Key, std::vector<Val>>
zazwyczaj używa drzewa RB z unikatowymi kluczami.
- Fetch jest O (log N)
- Insert jest O (log N)
- Delete wynosi O (log N)
- Iteracja jest O (1)
jak ty widać, różnica nie jest warta mówienia, chyba że M jest bardzo duże.
Jednak pamięć obu jest ograniczona przez pamięć RAM. 1 TB jest po prostu niewykonalne w przypadku większości systemów i żadna płyta główna, o której słyszałem, nie obsługuje tej technologii.
Lepiej korzystaj z bazy danych dla 1 TB danych. Możesz wybrać prawie dowolną bazę danych dla tego zadania. Kyoto Cabinet jest prosty i robi to, co chcesz, ale możesz również użyć PostgreSQL, MySQL, Sqlite, Dynamo, Redis, MongoDB, Cassandra, Voldemort ...
Dlaczego nie spróbujesz ich obu i się dowiesz? –
W obu przypadkach wydajność prawdopodobnie zostanie zdominowana przez prędkość dysku, chyba że masz system z 1 TB pamięci RAM ... –
Jeśli chcesz używać 'const char *' jako klucza, musisz również podać predykat porównania aby to działało. Łatwiej byłoby użyć 'std :: map'. –