ناقل C++ للأزواج

Naql C Llazwaj



في لغة C++، المتجه عبارة عن حاوية متعددة الاستخدامات يمكنها تغيير حجم نفسها ديناميكيًا مما يسمح بمعالجة العناصر بكفاءة. في حين أن الزوج عبارة عن حاوية بسيطة يمكنها استيعاب كائنين غير متجانسين، مما يوفر وسيلة ملائمة لربط البيانات ذات الصلة وإدارتها. عندما يتم تنظيم هذه الأزواج داخل ناقل، يكتسب المطورون القدرة على إنشاء مجموعات ديناميكية من أزواج القيمة الرئيسية أو أي مجموعة أخرى من عنصرين متميزين.

تعتبر بنية البيانات هذه مفيدة بشكل خاص في السيناريوهات التي يجب فيها تخزين العناصر كأزواج، كما هو الحال عند التعامل مع أزواج القيمة الرئيسية أو تمثيل العلاقات بين الكيانات. في هذه المقالة، سوف نستكشف مفهوم ناقل C++ للأزواج ونستكشف الأمثلة المختلفة لتوضيح تطبيقاته العملية.







المثال 1: الاستخدام الأساسي: التكرار عبر ناقل للأزواج

لنفكر في مثال أساسي حيث نقوم بإنشاء متجه للأزواج التي تمثل أسماء الطلاب والأعمار المقابلة لهم. التكرار على متجه من الأزواج يشبه التكرار على ناقل منتظم. يمكن للمرء استخدام التكرارات أو حلقات 'for' المستندة إلى النطاق لاسترداد كل زوج داخل المتجه.



يعرض هذا المثال بناء جملة 'متجه الأزواج' في سياق ذي معنى.



#تشمل
#تشمل <ناقل>
#تشمل <المنفعة>

انت مين ( ) {

الأمراض المنقولة جنسيا::ناقل < الأمراض المنقولة جنسيا::زوج < الأمراض المنقولة جنسيا::سلسلة، كثافة العمليات >> StudentData;

StudentData.push_back ( الأمراض المنقولة جنسيا::make_pair ( 'آدم' , عشرين ) ) ;
StudentData.push_back ( الأمراض المنقولة جنسيا::make_pair ( 'فاتورة' , 22 ) ) ;
StudentData.push_back ( الأمراض المنقولة جنسيا::make_pair ( 'تشارلي' , واحد وعشرين ) ) ;

الأمراض المنقولة جنسيا::كوت << 'بيانات الطالب: ' ;
ل ( ثابت السيارات & الطالب : بيانات الطالب ) {
الأمراض المنقولة جنسيا::كوت << 'اسم: ' << Student.First << '، عمر: ' << Student.Second << ستد::endl;
}

يعود 0 ;
}


في مقتطف كود C++ هذا، نبدأ بتضمين ثلاثة ملفات رأس أساسية: ' ' لعمليات الإدخال والإخراج، و'' لاستخدام حاوية المتجهات، و'' للوصول إلى 'std::' قالب الزوج'. تمكننا هذه الرؤوس من استخدام الوظائف الضرورية لبرنامجنا.





للمضي قدمًا، داخل الدالة main()، نعلن عن متجه يسمى 'studentData' باستخدام حاوية 'std::vector'. تم تصميم هذا المتجه لتخزين الأزواج حيث يتضمن كل زوج اسم الطالب (ممثلًا بـ 'std::string') وعمره (عدد صحيح 'int'). بعد ذلك، نقوم بتعبئة متجه 'studentData' بثلاثة أزواج. باستخدام وظيفة 'push_back'، تتم إضافة أزواج إلى نهاية المتجه، وضبط حجمه ديناميكيًا. ثم يتم تكرار الحلقة من خلال 'StudentData'، لاستخراج وطباعة اسم كل طالب وعمره. يعرض الإخراج 'بيانات الطالب:' التي تؤكد على التمثيل المنظم. تتم طباعة أسماء الطلاب وأعمارهم بشكل منفصل، مما يعرض البيانات المخزنة بوضوح.



المثال 2: فرز متجه الأزواج

يعد فرز متجهات الأزواج عملية شائعة، خاصة عند التعامل مع ارتباطات القيمة الرئيسية. يمكن استخدام الدالة 'std::sort' من رأس ' ' لهذا الغرض. دعونا نرى كيفية فرز متجه الأزواج بناءً على العنصرين الأول والثاني:

#تشمل
#تشمل <ناقل>
#تشمل <الخوارزمية>

انت مين ( ) {

الأمراض المنقولة جنسيا::ناقل < الأمراض المنقولة جنسيا::زوج < الأمراض المنقولة جنسيا::سلسلة، كثافة العمليات >> معلومات؛

info.push_back ( الأمراض المنقولة جنسيا::make_pair ( 'نفذ' , خمسة عشر ) ) ;
info.push_back ( الأمراض المنقولة جنسيا::make_pair ( 'دورا' , 29 ) ) ;
info.push_back ( الأمراض المنقولة جنسيا::make_pair ( 'حنا' , عشرين ) ) ;

الأمراض المنقولة جنسيا::كوت << 'المعلومات الأصلية: ' ;
ل ( ثابت السيارات & الإدخال: معلومات ) {
الأمراض المنقولة جنسيا::كوت << 'اسم: ' << دخول. أولا << '، عمر: ' << دخول.ثانية << ستد::endl;
}


الأمراض المنقولة جنسيا::فرز ( معلومات.ابدأ ( ) ، معلومات.نهاية ( ) ) ;

الأمراض المنقولة جنسيا::كوت << ' المعلومات المصنفة: ' ;
ل ( ثابت السيارات & الإدخال: معلومات ) {
الأمراض المنقولة جنسيا::كوت << 'عمر: ' << دخول.ثانية << '، اسم: ' << دخول. أولا << ستد::endl;
}

يعود 0 ;
}


في مثال كود C++ هذا، نعمل مع ناقل للأزواج لتخزين ومعالجة البيانات المتعلقة بالأفراد، وتحديدًا أسمائهم وأعمارهم. نقوم بتهيئة ناقل يسمى 'معلومات الأزواج' داخل الوظيفة الرئيسية (). بعد ذلك، نقوم بملء هذا المتجه بثلاثة أزواج، يحتوي كل منها على اسم وعمر شخص مميز، باستخدام وظيفة 'push_back' و'std::make_pair' لإنشاء زوج فعال.

نقوم بإخراج 'المعلومات الأصلية' إلى وحدة التحكم. يتضمن ذلك التكرار عبر ناقل 'المعلومات' وطباعة مكونات كل زوج. بعد ذلك، نستخدم خوارزمية 'std::sort' لإعادة ترتيب متجه 'info' استنادًا إلى عامل المقارنة الافتراضي للأزواج الذي يقارن العنصر الأول من كل زوج (في هذه الحالة، الأسماء). بعد عملية الفرز، نكرر مرة أخرى من خلال ناقل 'المعلومات' المعدل عن طريق طباعة المعلومات التي تم فرزها. هذه المرة، يؤكد الإخراج على الترتيب حسب العمر أولاً، مما يوضح نتيجة عملية الفرز.

المثال 3: دمج المتجهات ذات الأنواع المختلفة

قد تواجه بعض المواقف حيث يجب عليك دمج معلومات من متجهين. يمكن أن يساعد متجه الأزواج في الحفاظ على الارتباط بين العناصر من المتجهين.

#تشمل
#تشمل <ناقل>

انت مين ( ) {
الأمراض المنقولة جنسيا::ناقل < الأمراض المنقولة جنسيا::سلسلة > المدن = { 'نيويورك' , 'باريس' , 'طوكيو' } ;
الأمراض المنقولة جنسيا::ناقل < كثافة العمليات > السكان = { 8175133 , 2140526 , 37435191 } ;

الأمراض المنقولة جنسيا::ناقل < الأمراض المنقولة جنسيا::زوج < الأمراض المنقولة جنسيا::سلسلة، كثافة العمليات >> cityPopulationPairs;

ل ( size_t ط = 0 ; أنا < الأمراض المنقولة جنسيا::دقيقة ( حجم المدن ( ) ، حجم السكان ( ) ) ; ++أنا ) {
cityPopulationPairs.push_back ( { مدن [ أنا ] السكان [ أنا ] } ) ;
}

الأمراض المنقولة جنسيا::كوت << 'أزواج المدينة والسكان:' << ستد::endl;
ل ( ثابت السيارات & الزوج: أزواج سكان المدينة ) {
الأمراض المنقولة جنسيا::كوت << 'مدينة: ' << زوج.أولا << '، سكان: ' << زوج.ثانية << ستد::endl;
}

يعود 0 ;
}


في الوظيفة 'الرئيسية' للكود، يتم الإعلان عن ناقلين: 'المدن' لتخزين أسماء المدن و'السكان' لتخزين القيم السكانية المقابلة.

يتم تعريف المتجه الثالث، 'cityPopulationPairs'، لتخزين أزواج المدن وسكانها. كل زوج هو 'std::pair' حيث يمثل 'std::string' اسم المدينة ويمثل 'int' عدد السكان. نستخدم بعد ذلك تكرار حلقة 'for' على المتجهات (المدن والسكان) باستخدام 'std::min' للتأكد من أن الحلقة لا تصل إلى العناصر التي تتجاوز حجم المتجه الأصغر. داخل الحلقة، يتم إنشاء أزواج من المعلومات المتعلقة بسكان المدينة وإلحاقها بالمتجه 'cityPopulationPairs'.

بعد دمج المعلومات، يتم استخدام حلقة 'for' أخرى للتكرار عبر الأزواج المخزنة في 'cityPopulationPairs'. يتم بعد ذلك عرض البيانات المجمعة على المخرجات القياسية باستخدام 'std::cout'، والتي تمثل بوضوح كل مدينة وعدد سكانها المقابل.

مثال 4: إيجاد القيم القصوى والدنيا

يعد تحديد الحد الأدنى والحد الأقصى للقيم ضمن مجموعة البيانات مطلبًا شائعًا في العمليات الخوارزمية والإحصائية. يمكننا استخدام متجه الأزواج لتتبع القيم القصوى والدنيا في التسلسل:

#تشمل
#تشمل <ناقل>
#تشمل <الخوارزمية>

انت مين ( ) {
الأمراض المنقولة جنسيا::ناقل < كثافة العمليات > أرقام = { 5 , 12 , 18 , 3 , 7 , 4 , 33 } ;

الأمراض المنقولة جنسيا::ناقل < الأمراض المنقولة جنسيا::زوج < أنت، أنت >> this.minMaxPairs;

الأمراض المنقولة جنسيا::فرز ( أرقام.ابدأ ( ) ، أرقام.انتهى ( ) ) ;

minMaxPairs.push_back ( { number.front ( ) , أرقام.العودة ( ) } ) ;

الأمراض المنقولة جنسيا::كوت << 'أزواج الحد الأدنى والحد الأقصى:' << ستد::endl;
ل ( ثابت السيارات & الزوج: الحد الأدنى MaxPairs ) {
الأمراض المنقولة جنسيا::كوت << 'الحد الأدنى:' << زوج.أولا << '، الأعلى: ' << زوج.ثانية << ستد::endl;
}

يعود 0 ;
}


يوضح رمز C++ المقدم عملية العثور على الحد الأدنى والحد الأقصى للقيم في متجه من الأعداد الصحيحة ثم تخزين هذه القيم في متجه من الأزواج. يتم في البداية الإعلان عن ناقل يسمى 'الأرقام' وتهيئته بمجموعة من الأعداد الصحيحة. لتحديد الحد الأدنى والحد الأقصى للقيم في مجموعة البيانات بكفاءة، يستخدم البرنامج وظيفة 'std::sort' من مكتبة الخوارزمية.

تهدف هذه الوظيفة إلى ترتيب العناصر بترتيب تصاعدي، مما يبسط عملية تحديد كل من القيم الدنيا والقصوى في مجموعة البيانات. يتم تطبيق عملية الفرز على متجه 'الأرقام' باستخدام أرقام.begin() وأرقام.end() كمعلمات للنطاق. بعد خطوة الفرز، يقوم البرنامج بإنشاء متجه للأزواج، 'minMaxPairs'، لتخزين القيم الدنيا والقصوى المحسوبة. يتم بعد ذلك استخدام وظيفة 'push_back' لإضافة زوج واحد يحتوي على العنصر الأول (الحد الأدنى) والأخير (الحد الأقصى) لمتجه الأرقام المصنفة. وأخيرًا، يقوم البرنامج بإخراج النتيجة من خلال التكرار عبر ناقل 'minMaxPairs' وعرض القيم الدنيا والقصوى.

خاتمة

في الختام، يظهر ناقل C++ للأزواج كبنية بيانات قوية ومرنة، مما يضيف طبقة من التنوع إلى مهام البرمجة. من خلال الاستكشاف التفصيلي لتركيبها والتطبيقات العملية، رأينا كيف تساعد هذه الحاوية في تنظيم ارتباطات القيمة الرئيسية، ودمج المعلومات من المتجهات المختلفة، وتتبع القيم الدنيا والقصوى.