مع خريطة STL / مجموعة / مولتيست / multimap، كيفية العثور على القيمة الأولى أكبر من أو يساوي إلى مفتاح البحث؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

لنفترض لدي مجموعة من القيم وتخزينها في الأمراض المنقولة جنسيا :: مجموعة:

{1، 2، 6، 8}

وولدي مفتاح البحث، مثلا، 3. أريد أن أضع 3 إلى وظيفة والحصول على القيمة الأولى أكبر من أو تساوي 3، في هذه الحالة أود أن ترغب في الحصول على 6.

وظيفة البحث () المنصوص عليها في خريطة / مجموعة / multimap / ومجموعة وبطبيعة الحال، يرجع مكرر نهاية لهذه القضية. هل هناك وظيفة مماثلة لتجد أن سيعود 6 في هذه الحالة؟

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

المحلول

ونعم: upper_bound(X) بإرجاع مكرر لافتا إلى العنصر الأول أكبر من X. وهناك أيضا وظيفة lower_bound(X) التي ترجع مكرر لافتا إلى العنصر الأول لا يقل عن X. وهكذا، كل من العناصر الموجودة في نصف مفتوحة [lower_bound(X), upper_bound(X)) الفاصل سيكون مساويا لX.

نصائح أخرى

وأنت تريد UPPER_BOUND وظيفة.

map<int, int> mymap = { 1,2,6,8 };
map<int,int>::iterator i = mymap.upper_bound(3); // returns an iterator to the '6' element.

LOWER_BOUND .

عفوا، كنت أعني LOWER_BOUND أو الدالة العضو، وليس خوارزمية .

إذا لا يوجد شيء في المجموعة وهذا أكبر من أو يساوي البند بحثك، فإنه سيعود نهاية ().

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