تحديد الحد الأدنى لعدد من الدلاء عند بناء دفعة :: unordered_map

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

  •  22-08-2019
  •  | 
  •  

سؤال

وأنا أحاول أن استخدام دفعة :: unordered_map إلى ذاكرة التخزين المؤقت بعض القيم. وأنا أحاول أن تحديد الحد الأدنى لعدد الدلاء في المنشئ:

#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> >());

ولكن عندما عرض معلومات عن بلدي unordered_map في نهاية البرنامج:

وز ++:

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

والرأسمالي ++:

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

وكيف يمكنني تحديد الحد الأدنى لعدد من الدلاء؟

هل كانت مفيدة؟

المحلول

وboost::unordered_map::max_bucket_count() إرجاع الحد تعتمد على التنفيذ على عدد دلو من unordered_map. يبدو أنك قد تجاوزت هذا الحد مع المعلمة منشئ الخاص بك. لاحظ أنه في حين يحدد MSDN هذا الدلاء ماكس "في الوقت الراهن" المسموح بها (أيا كان ذلك يعني)، تحدد المواصفات C ++ 0X أن يكون أكثر دلاء الخريطة يمكن أن يكون من أي وقت مضى.

وأنا لم تستخدم الطبقة، وأنا لا أرى أي شيء في مشروع C ++ 0X المواصفات ليشرح لماذا منشئ هو خلق بصمت كائن التي لا تفعل ما قال ل.

وأنا أيضا لا أعرف ما هي الدوافع قد تكون وراء 1572869 قيمة، عدا أنه رئيس الحكومة largeish.

نصائح أخرى

والجواب أخرى صحيحة حول المعيار، ولكن max_bucket_count صغير هو في الواقع خطأ في دفعة 1.38، فإن أي نسخة أخرى تمكنك من استخدام المزيد من الدلاء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top