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

دليل الأساسيات لـ C++

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

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

C++ arrays & strings

مبادئ C++

C++ فئة & موضوع

المراجع في C++

حقوق الوصول في الوراثة في C++

C++ Vector (النطاق)

دليل مرجع C++

استخدام C++ set equal_range() و مثال

C++ Stack (الطوق)

C ++ set equal_range()يستخدم هذا الدالة لتحديد نطاق الحدود الذي يحتوي على جميع العناصر المتطابقة مع val في الحاوية. لأن حاوية set لا تحتوي على قيم مكررة، لذا فإن هذا النطاق يحتوي على عنصر واحد على الأكثر.

إذا لم يكن val متطابقًا مع أي قيمة في الحاوية، فإن نطاق العودة سيكون 0، وستشير كلا المضروبات إلى القيمة الأكبر التي ليست متطابقة مع val، وإلا إذا كان val أكبر من جميع العناصر في الحاوية، فإنه سيشير إلى end.

النحو

زوج<const_iterator، const_iterator> equal_range (باستخدام value_type& val) ثابت;
زوج<مستعرض، مستعرض>   equal_range (باستخدام value_type& val);

يحدد هذا النطاق بثلاثة م迭代رات، واحدة تشير إلى العنصر الأول الذي لا يقل عن val، والأخرى تشير إلى العنصر الأول الذي يزيد عن val.

المفارقات

val:القيمة التي تريد البحث عنها في كون الحاويات.

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

يعود هذا الدالة إلى pair. حيث يوجد first في الحد الأدنى من النطاق، ويكون له نفس القيمة التي سيقوم lower_bound(val) بإرجاعها، وsecond هو الحد الأعلى من النطاق الذي سيقوم upper_bound(val) بإرجاعه.

معقد

حجمه هو حساب اللوغاريتم.

صلاحية الم迭代ر

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

الصراع على البيانات

الكون يتم زيارتة (لا يمكن تعديل الكون سواء باستخدام نسخة const أو غير const).

زيارة عناصر الكون آمنة.

الأمان من خلال الاستثناء

إذا تم إطلاق الاستثناء، فإن لا يوجد أي تغيير في الكون.

مثال 1

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

#include <iostream>
#include <set>
using namespace std;
int main(void) {
   set<char> m = {'a','b','c','d'};
   auto ret = m.equal_range('b');
   cout << "الحد الأدنى للb هو: " << *ret.first << endl;
   cout << "الحد الأعلى للb هو: " << *ret.second << endl;
   cout << "الحد الأعلى يشير إلى: " << *ret.second << '\n';
return 0;

}

الحد الأدنى للb هو: b
الحد الأعلى للb هو: c

في هذا المثال، الحد الأدنى للb هو b، والحد الأعلى للb هو c.

مثال 2

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

#include <iostream>
#include <set>
using namespace std;
 
int main()
{
     // تعيين الكون
    set<int> mp;
 
    // إدراج العناصر في ترتيب عشوائي
    mp.insert( 4 );
    mp.insert( 1 );
    mp.insert( 6 );
 
    pair<set<int>::const_iterator,set<int>::const_iterator> ret;
 
    ret = mp.equal_range(10);
    cout << "الحد الأدنى هو: " << *ret.first;
    cout << "\nالحد الأعلى هو: " << *ret.second;
 
    cout << "الحد الأعلى يشير إلى: " << *ret.second << '\n';
return 0;

}

الحد الأدنى هو 3
الحد الأعلى هو 3

في هذا المثال، يعود equal_range() إلى end()، أي 3، لأنه يحاول البحث عن 10 غير موجودة في set mp.

مثال 3

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

#include <set>  
#include <iostream>  
  
int main( )  
{  
   using namespace std;  
   typedef set<int, less<int> > IntSet;  
   IntSet s1;  
   set<int, less<int> >::const_iterator s1_RcIter;  
  
   s1.insert(10);  
   s1.insert(20);  
   s1.insert(30);  
  
   pair<IntSet::const_iterator, IntSet::const_iterator> p1, p2;  
   p1 = s1.equal_range(20);  
  
   cout << "يُكون الحد الأعلى للمفتاح للاعتماد على العنصر في مجموعة s1 هو: "  
        << *(p1.second) << "." << endl;  
  
   cout << "يُكون الحد الأدنى للمفتاح للاعتماد على العنصر في مجموعة s1 هو: "  
        << *(p1.first) << "." << endl;  
  
   //يُدعى upper_bound مباشرة
   s1_RcIter = s1.upper_bound(20);  
   cout << "يُحصل على مباشرة بواسطة upper_bound (20): "  
        << *s1_RcIter << "," << endl  
        << "المفتاح الثاني للمزوج المُطابق"  
        << "يُرجع بواسطة equal_range (20)." << endl;  
  
   p2 = s1.equal_range(40);  
  
    //إذا لم يتم العثور على مفتاح مطابق
    //تُرجع كلا العنصرين end()
   if ((p2.first == s1.end()) && (p2.second == s1.end()))  
      cout << "لا توجد عناصر في مجموعة s1 لها مفتاح أقل من 40." << endl;  
   else  
      cout << "العناصر في مجموعة s1 التي لها مفتاح >= 40 هي: "  
           << *(p1.first) << "." << endl; 
           
           cout << "الحد الأعلى يشير إلى: " << *ret.second << '\n';
return 0;

}

يُكون الحد الأعلى للمفتاح للاعتماد على العنصر في المجموعة s1 هو: 30.
يُكون الحد الأدنى للمفتاح للاعتماد على العنصر في المجموعة s1 هو: 20.
يُحصل على 30 مباشرة بواسطة upper_bound (20),
المفتاح الثاني للمزوج المُطابق يتم استرجاعه بواسطة equal_range (20).
لا توجد عناصر في المجموعة s1 لها مفتاح أقل من 40.

مثال 4

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

#include <iostream>
#include <set>
using namespace std;
int main ()
{
  std::set<int> myset;
  للأولى (للمستطيل i=1; i<=5; i++) myset.insert(i*10);       // myset: 10 20 30 40 50
  pair::const_iterator,set::const_iterator> ret;
  pair<std::set<int>::const_iterator,set<int>::const_iterator> ret;
  ret = myset.equal_range(30);
  cout << "الحد الأدنى يشير إلى: " << *ret.first << '\n';
  cout << "الحد الأعلى يشير إلى: " << *ret.second << '\n';
return 0;

}

الإخراج:
الحد الأدنى يشير إلى: 30

C++ Stack (الطوق)