English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
C ++ set value_comp()يهدف هذا الدالة إلى: العودة إلى كائن المقارنة. هذه الدالة تستخدم لتقارنة عناصر، لتحقق ما إذا كان المفتاح الأول للعنصر يسبق المفتاح الثاني للعنصر. يستخدم لتقارنة حجم القيمة.
مثال:: - بالنسبة لمجموعة m، إذا كانت العناصر e1 (k1،d1) و e2 (k2,d2) من نوع value_type هي كائنات، حيث k1 و k2 هي مفتاحي نوع key_type، و d1 و d2 هي بيانات نوع data، فإن m value_comp (e1،e2) تساوي m key_comp (k1،k2).
value_compare value_comp() const;
bool-operator (value_type &left, value_type &right);
إذا كانت القيمة في اليسار أقل من القيمة في اليمين وغير متساوية، فيجب العودةصحيح.
لا يوجد
يستعيد مُعادلة مقارنة القيمة.
لا يتغير.
لا يوجد تغيير.
يتم زيارة الحاوية.
لا يوجد وصول إلى العناصر المضمونة: هو آمن في الحصول على عناصر المجموعة.
إذا تم اطلاق استثناء، فإن لا يوجد أي تغيير في الحاوية.
دعونا نرى مثالاً بسيطاً على مقارنة قيم العناصر:
#include <iostream> #include <set> using namespace std; int main() { set<int> c; set<int>::value_compare comp = c.value_comp(); cout << "مقارنة 2 و5 (1 صحيح، 0 خطأ): " << comp(2, 5) << endl; cout << "مقارنة 8 و5 (1 صحيح، 0 خطأ): " << comp(8, 5) << endl; }
الإخراج:
مقارنة 2 و5 (1 صحيح، 0 خطأ): 1 مقارنة 8 و5 (1 صحيح، 0 خطأ): 0
في المثال السابق، لأن 2 أقل من 5، فإن comp(2، 5) يعود إلى true؛ لأن 8 ليس أقل من 5، فإن comp(8، 5) يعود إلى false.
دعونا نرى مثالاً بسيطاً:
#include <iostream> #include <set> using namespace std; int main() { set<int> myset; set<int>::value_compare mycomp = myset.value_comp(); for (int i = 0; i <= 5; i++) myset.insert(i); cout << "myset يحتوي على:"; int highest = *myset.rbegin(); set<int>::iterator it = myset.begin(); do { cout << ' ' << *it; }; while (mycomp(*(++it), highest)); cout << '\n'; return 0; }
الإخراج:
يحتوي myset على: 0 1 2 3 4
في المثال السابق، يخزن المتغير الأعلى آخر عنصر مجموعة myset، ويُستخدم العنصر الأول في المجموعة (حسب ترتيب الترتيب) لتشغيل مُعادلة الاستدعاء. يتم استخدام دالة key_comp() المسماة mycomp لطباعة العناصر التي سيتم تشغيل المُعادلة فيها حتى يكون المفتاح الأول أقل من المفتاح الأخير (لهذا السبب، يستخدم mycomp(*(++it), highest)).
دعونا نرى مثالاً بسيطاً:
#include <set> #include <iostream> int main() { using namespace std; set<int, less<int>> s1; set<int, less<int>>::value_compare vc1 = s1.value_comp(); bool result1 = vc1( 2, 3 ); if( result1 == true ) { cout << "vc1(2,3) يعود إلى قيمة true, " << "حيث vc1 هو وكيل s1." << endl; } else { cout << "vc1(2,3) يعود إلى قيمة false, " << "حيث vc1 هو وكيل s1." << endl; } set<int, greater<int>> s2; set<int, greater<int>>::value_compare vc2 = s2.value_comp( ); bool result2 = vc2( 2, 3 ); if( result2 == true ) { cout << "vc2(2,3) يعود إلى قيمة true, " << "حيث vc2 هو وكيل s2." << endl; } else { cout << "vc2(2,3) يعود إلى قيمة false, " << "حيث vc2 هو وكيل s2." << endl; } }
الإخراج:
vc1(2,3) يعود إلى قيمة true، حيث vc1 هو وكيل s1. vc2(2,3) يعود إلى قيمة false، حيث vc2 هو وكيل s2.
دعنا نرى مثالاً بسيطاً لعرض الفرق بين key_comp() و value_comp():
#include <set> #include <iostream> #include<map> using namespace std; int main() { set<int> myset; int highest1, highest2; set<int>::key_compare myCompKeyForSet = myset.key_comp(); set<int>::value_compare myCompValForSet = myset.value_comp(); for (int i = 0; i <= 5; i++) { myset.insert(i); } highest1 = *myset.rbegin(); set<int>::iterator it = myset.begin(); while ( myCompKeyForSet(*it, highest1) ) it++; cout << "\nhighest1 is " << highest1; // prints 5 highest2 = *myset.rbegin(); it = myset.begin(); while (myCompValForSet(*it, highest2)) it++; cout << "\nhighest2 هو " << highest2; // طباعة 5 return 0; }
الإخراج:
highest1 هو 5 highest2 هو 5
في المثال أعلاه، عندما نقارن key_comp() و value_comp()، هاتان الكلمتان متشابهتان في هذا النوع من مخزونات الجمع. للوظائف من هذين النوعين، سيتم إرجاع نفس القيمة.