مع خريطة STL / مجموعة / مولتيست / multimap، كيفية العثور على القيمة الأولى أكبر من أو يساوي إلى مفتاح البحث؟
-
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 أو الدالة العضو، وليس خوارزمية .
إذا لا يوجد شيء في المجموعة وهذا أكبر من أو يساوي البند بحثك، فإنه سيعود نهاية ().