std::map
ile kullanılacak özel bir ayırıcının nasıl uygulanacağı hakkında bazı işaretçiler arıyorum. Konteynırdaki her öğe için bir tahsisat olmadan milyonlarca giriş içeren bir haritayı doldurmakla ilgileniyorum (bu kapsayıcı için varsayılan olan). Bunun nedeni, verileri bir grafiğin (QCustomPlot) depolanması için bir harita kullanan bir üçüncü taraf kitaplığına aktarmak ve büyük zaman serilerini çizerken performansın üstesinden gelmek olduğunu hissediyorum.Std :: map ile kullanılacak özel bir ayırıcı nasıl uygulanır?
std::map
'un boyutu önceden biliniyorsa bunu bir tahsis ile yapmak mümkün müdür?
DÜZENLEME: Düğümler, kabın içine artan sırada beslenecektir.
Belki bu sorularınızı cevaplıyor? http://stackoverflow.com/questions/13049340/initializing-a-stdmap-when-the-size-is-known-in-advance –
Mümkün, ancak gereken boyutun bilinmeyeceğinin farkında olun '(sizeof (Key)) + sizeof (Değer)) * num_elem'. Bir dereceye kadar aşırı tahsis etmeniz gerekecek çünkü bir 'haritanın yapacağı ilk şeylerden biri' [rebind_alloc'] (http://en.cppreference.com/w/cpp/memory/allocator_traits) Her elemanı tutmak için kullandığı iç ağaç düğümü türü. Bunun dışında benim önerim, std :: allocator ve std :: allocator_traits belgelerini okumak ve daha sonra stdlib'in nasıl kullanıldığını incelemek (konuyla ilgili bir öğretici bulamadığınızı varsayarak). – Praetorian
Grafikte görüntülenen şeyler genellikle doğada ardı ardına sıralanır, bu nedenle belki de boost :: flat_map (başlık altında sıralanmış bir vektördür) std :: map'den daha iyidir. –