وظيفة تجزئة عامة للتجمعات في المجموعات غير المرتبة
ومع ذلك ، يمكن أن يؤدي استخدام tuples كمفاتيح في هذه المجموعات دون تحديد وظيفة التجزئة المخصصة إلى سلوك غير متوقع.
struct std :: hash
في حين أن هذا النهج يعمل ، يمكن أن يكون مملاً لتحديد وظائف التجزئة لكل نوع tuple المستخدمة. لأتمتة هذا ، يمكن تنفيذ وظيفة التجزئة العامة على النحو التالي:
template struct std::hash<:tuple int>> { size_t operator()(std::tupleconst& tuple) const { ... } };
هذه الوظيفة تعزز بحث الاسم المعتمد على الوسيطة (ADL) للسماح للمترجم بتحديد تطبيق التجزئة الصحيح تلقائيًا استنادًا إلى نوع tuple.
#includeللحصول على حل متوافق مع المعايير ، يمكن إنشاء مساحة اسم مخصصة واستخدامها لتحديد وظيفة التجزئة:namespace std { namespace { // Code derived from Boost template inline void hash_combine(std::size_t& seed, T const& v) { ... } // Recursive template code from Matthieu M. template ::value - 1> struct HashValueImpl { ... }; } template struct hash<:tuple>> { size_t operator()(std::tuple const& tuple) const { ... } }; }
مساحة الاسم my_hash { // الأنواع غير المتقدمة إلى std :: hash قالب
عند استخدام هذا الحل ، يجب أن تشير المجموعة غير المرتبة صراحة إلى تطبيق التجزئة المخصصة على النحو التالي:
unordered_set ، std :: hashتنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3