شرط أساسي في الأمراض المنقولة جنسيا :: multimap

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

  •  03-07-2019
  •  | 
  •  

سؤال

ولدي الأمراض المنقولة جنسيا :: multimap حيث المفتاح هو فئة مخصصة. شيء من هذا القبيل:

Class X {
public:
    std::string s;
    int x;
    operator <(const X& other) const { return s < other.s; }
};
std::multimap<X, int> mymap;

والآن، أود أن استخدام UPPER_BOUND وLOWER_BOUND تكرار على كل العناصر بنفس القيمة من "ليالي". هل أنا بحاجة لتنفيذ بعض المشغل الآخر لX (على سبيل المثال: ==). أو أنه سوف يعمل بشكل صحيح تماما مثل هذا؟

وأيضا، ماذا ينبغي أن العرض على النحو حجة ل<م> UPPER_BOUND و <م> LOWER_BOUND ؟ أفترض أنني يجب أن إنشاء كائن وهمي مع القيمة المطلوبة من "ق"؟

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

المحلول

ومنذ class X هو المفتاح لmultimap، المعلمة إلى upper_bound() / lower_bound() يجب أن يكون من هذا النوع. إذا class X ديه التحويل الضمني من std::string (والذي هو نوع من X::s) ثم يمكنك استخدام هذا كمعلمة لupper_bound() / lower_bound().

والمقارنة الافتراضية لmultimap هي less<> الذي يدعو ببساطة operator <() - بحيث هي المشغل الوحيد لكم يشترط أن تكون في class X لmultimap للعمل

نصائح أخرى

وتحتاج فقط إلى توفير عامل == و <.

وUPPER_BOUND وLOWER_BOUND هم تماما مثل أي طريقة الاكتشاف من نوع آخر، لذلك كنت في حاجة إلى نفس النوع من كائن للمقارنة مع - في حالتك، وهو 'دمية' الكائن مع القيمة المطلوبة من الصورة

.

تعديل : لالتعليقات صحيحة التي تحتاجها مشغل فقط <لانخفاض / UPPER_BOUND، وتجد. ولكن إذا كنت ترغب في استدعاء الأساليب الأخرى على الحاويات الخاصة بك، وسوف تحتاج مشغل == كذلك. على سبيل المثال. إذا كنت ترغب في فرز () حاوية الخاص بك، فإنك تحتاج إلى مشغل ==.

ووالزائدة 2 تحتاج لجميع الحاويات STL هي المشغل <== والمشغل. أجد أفضل الممارسات لتنفيذها على حد سواء.

وبطبيعة الحال، فإن السؤال ويمكن أيضا أن يتم الرد عليها بشكل كامل من خلال تنفيذ functor المقارنة في الخريطة نفسها، وليس الاعتماد على الكائنات. هذا هو في كثير من الأحيان وسيلة جيدة لتنفيذ طرق مختلفة من استدعاء البحث () على الخريطة.

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