English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تعليمية C++ الأساسية

تحكم في العملية C++

الوظائف في C++

مجموعات C++ & سلاسل

هياكل بيانات C++

مفاهيم C++ & الأجهزة

المؤشرات في C++

الوراثة في C++

تعليمية STL الخاصة بـ C++

دليل مرجعي C++

استخدامات upper_bound() في C++ set و أمثلة

STL Set (الجمع) في C++

C ++ set upper_bound()يستخدم الدالة لتحويل م迭代ر يشير إلى القيمة في وعاء المجموعات، والقيمة أكبر من القيمة المرسلة كمعامل.

النحو

      iterator upper_bound(const value_type& val) const; قبل C++ 11
      iterator upper_bound(const value_type& val); بعد C++ 11
const_iterator upper_bound(const value_type& val) const; بعد C++ 11

المفارقة

valالقيمة التي يجب البحث عنها داخل وعاء المجموعات.

القيمة المُرجعة

يُرجع مآلة يشير إلى القيمة في محيط set، التي هي أكبر من القيمة التي تم تمريرها كمعامل. إذا لم يكن هناك أي عنصر مثل ذلك، يُرجع end().

معقد

حجمه ثنائي الأسس.

صلاحية الماكينة

لا يوجد تغيير.

تداخل البيانات

المعطيات يتم زيارتها (لا يمكن تعديل المحتويات من النسخة الثابتة أو غير الثابتة من الماكينة).

زيارة عناصر المجموعة في نفس الوقت آمنة.

استثناء

إذا أُثيرت استثناءً، فإن هناك لا يوجد أي تغيير في المحتويات.

مثال1

دعونا نرى مثالاً بسيطاً، للحصول على الحد الأعلى للقيمة المحددة:

#include <iostream>
#include <set>
using namespace std;
int main(void) {
   set<char> m = {'a', 'b', 'c', 'd'};
           
   auto it = m.upper_bound('b');
   cout << "الحد الأعلى لـ b هو (>): " << *it << endl;
   return 0;
}

الناتج:

الحد الأعلى لـ b هو (>): c

في هذا المثال،عند محاولة العثور على الحد الأعلى للعنصر b،ستقوم بالعودة إلى القيمة الأكبر من b، وهي c

مثال2

دعونا نرى مثالاً بسيطاً، حذف العناصر من set من الحد الأدنى إلى الحد الأعلى:

#include <iostream>
#include <set>
using namespace std;
int main ()
{
  set<int> myset;
  set<int>::iterator itlow,itup;
  for (int i=1; i<10; i++) myset.insert(i*10); // 10 20 30 40 50 60 70 80 90
  itlow=myset.lower_bound(30);                //       ^
  itup=myset.upper_bound(60);                 //                   ^
  myset.erase(itlow,itup);                     // 10 20 70 80 90
  std::cout << "myset يحتوي:";
  for (set<int>::iterator it=myset.begin(); it!=myset.end(); ++it)
    cout << ' ' << *it;
  cout << '
';
  return 0;
}

الناتج:

يحتوي myset على: 10 20 70 80 90

في هذا المثال،�数ون erase() تزيل عنصر من set من الحد الأدنى (=) إلى الحد الأعلى (>)، وتطبع الباقي.

مثال3

لنرى مثالاً بسيطاً:

#include<iostream>
#include<set>
using namespace std;
 
int main()
{
    //تهيئة الحاوية
    set<int> mp;
 
    //إدراج العناصر بترتيب عشوائي
    mp.insert( 12 );
    mp.insert( 11 );
    mp.insert( 15 );
    mp.insert( 14 );
 
    //عندما يوجد 11
    auto it = mp.upper_bound(11);
    cout << "الحد الأعلى للقيمة 11 هو ";
    cout << (*it) << endl;
 
    //عندما لا يوجد 13
    it = mp.upper_bound(13);
    cout << "الحد الأعلى للقيمة 13 هو ";
    cout << (*it) << endl;
 
    //عندما يكون 17 أكبر من أكبر مفتاح، يتم تنظيمها حسب الحجم
    //القيمة التي تعود إليها mp هي مفتاح، القيمة هي 0。
    it = mp.upper_bound(17);
    cout << "الحد الأعلى للقيمة 17 هو ";
    cout << (*it);
    return 0;
}

الناتج:

الحد الأعلى للقيمة 11 هو 12
الحد الأعلى للقيمة 13 هو 14
الحد الأعلى للقيمة 17 هو 4

في المثال السابق، عندما نحاول العثور على الحد الأعلى للقيمة التي لا توجد في حاوية المجموعة ولكنها لا تتجاوز القيمة القصوى، فإنها تعود إلى القيمة الأكبر، أي عندما نحاول العثور على الحد الأعلى لرقم 13، فإنها تعود إلى 14، وعندما نحاول العثور على الحد الأعلى للقيمة التي لا توجد في المجموعة ولكنها تتجاوز القيمة القصوى، فإنها تعود إلى end().

مثال 4

لنرى مثالاً بسيطاً:

#include <set>  
#include <iostream>  
  
int main( )  
{  
   using namespace std;     
   set<int> s1;  
   set<int> :: const_iterator s1_AcIter, s1_RcIter;  
  
   s1.insert( 10 );  
   s1.insert( 20 );  
   s1.insert( 30 );  
  
   s1_RcIter = s1.upper_bound( 20 );  
   cout << "العنصر الأول في المجموعة s1 الذي يكون مفتاحه أكبر من 20 هو: " << *s1_RcIter << "." << endl;  
  
   s1_RcIter = s1.upper_bound( 30 );  
  
   //إذا لم يتم العثور على مفتاح مطابق، يتم العودة إلى end()  
   if ( s1_RcIter == s1.end( ) )  
      cout << "المجموعة s1 لا تحتوي على مفتاح قيمته أكبر من العنصر 30." << endl;  
   else  
      cout << "مفتاح> 40 العناصر في المجموعة s1 هي: "  
           << *s1_RcIter << "." << endl;  
  
    //يمكن العثور على العنصر الموجود في موقع معين في المجموعة
    //من خلال استخدام محطات الالساقطة المدرجة للوصول إلى المواقع
   s1_AcIter = s1.begin();  
   s1_RcIter = s1.upper_bound(*s1_AcIter);  
   cout << "المفتاح الأولي للعنصر الأولي لـ s1 أكبر من"  
        << endl << "العنصر الأولي لـ s1 هو: "  
        << *s1_RcIter << "." << endl;  
        
        return 0;
}

الناتج:

العنصر الأولي الأولي لـ الجمع s1 أكبر من 20 هو: 30.
ليس هناك مفتاح في الجمع s1 أكبر من العنصر 30.
المفتاح الأولي للعنصر الأولي لـ s1 أكبر من
العنصر الأولي لـ s1 هو: 20.

STL Set (الجمع) في C++