كيفية استخدام فئة STL PRIORITY_QUEUE مع نوع مخصص


توضح هذه المقالة كيفية تحديد مكتبة قالب قياسي (STL) priority_queue حاوية محول فئة قالب يستخدم أنواع بيانات مخصصة (المعرفة) مثل البنيات والفئات. توضح هذه المقالة أيضا كيفية ترتيب العناصر في الفئة الحاوية priority_queue.

ملاحظة Microsoft Visual c + +.NET 2002 و Microsoft Visual c + +.NET 2003 صياغة كل من التعليمات البرمجية المدارة هو توفير الدعم من Microsoft.NET Framework ونموذج التعليمات البرمجية غير المدارة الأصلية Microsoft Windows. تنطبق المعلومات الواردة في هذه المقالة فقط على التعليمات البرمجية غير المدارة Visual c + +. يعتمد Microsoft Visual c + + 2005 كل من طراز التعليمات البرمجية المدارة التي يتم توفيرها من قبل Microsoft.NET Framework وغير المدارة نموذج التعليمات البرمجية الأصلية في Microsoft Windows.

في هذه المهمة

مقدمة


توضح هذه المقالة كيفية استخدام فئة محول priority_queue الحاوية قالب مكتبة قالب قياسي (STL) مع أنواع بيانات مخصصة (المعرفة) مثل البنيات والفئات. توضح هذه المقالة أيضا كيفية ترتيب priority_queue أعضاء الفئة عن طريق التحميل الزائد قوس الزاوية اليسرى "<" أو قوس الزاوية اليمنى ">" عوامل تشغيل المقارنة. توضح هذه المقالة أيضا كيفية تعريف متغيرات الفئة الحاوية التي تحتوي على أعضاء البيانات المخصصة (المعرفة) priority_queue وكيفية الوصول إلى هذه المتغيرات في البرنامج.

العودة إلى أعلى

متطلبات

تفترض هذه المقالة أنك معتاد على المواضيع التالية:
  • البرمجة بواسطة أنواع بيانات Library(STL) قالب قياسي والحاوية
العودة إلى أعلى

إنشاء نوع بيانات مخصصة

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

لاستخدام الفئة priority_queue مع أنواع بيانات مخصصة (المعرفة من قبل المستخدم)، يجب تحديد نوع بيانات مخصص كما هو موضح في التعليمات البرمجية التالية:
//Define a custom data type.
class Student {
public:
char* chName;
int nAge;
Student(): chName(""),nAge(0){}
Student( char* chNewName, int nNewAge ):chName(chNewName), nAge(nNewAge){}
};
ملاحظة: لتعريف بنية لنفس الغرض، يمكنك استبدال الفئة ب struct في نموذج التعليمات البرمجية هذا.

العودة إلى أعلى

تحديد ترتيب قائمة الانتظار

يمكنك تحديد ترتيب أعضاء الفئة priority_queue بالتحميل الزائد قوس الزاوية اليمنى "<" أو قوس الزاوية اليسرى ">" عوامل تشغيل المقارنة كما هو موضح في نموذج التعليمات البرمجية التالي:
//Overload the < operator.
bool operator< (const Student& structstudent1, const Student &structstudent2)
{
return structstudent1.nAge > structstudent2.nAge;
}
//Overload the > operator.
bool operator> (const Student& structstudent1, const Student &structstudent2)
{
return structstudent1.nAge < structstudent2.nAge;
}
العودة إلى أعلى

إنشاء والوصول إلى متغيرات priority_queue مع أنواع بيانات مخصصة

النموذج الأولى لفئة قالب priority_queue كما يلي:
template <
class Type,
class Container=vector<Type>,
class Compare=less<typename Container::value_type>
>
class priority_queue
تقوم بتعريف متغير priority_queue الذي يحدد نوع البيانات المخصص وعامل المقارنة كما يلي:
priority_queue<Student, vector<Student>,less<vector<Student>::value_type> > pqStudent1;
يمكنك استخدام أساليب مختلفة من فئة priority_queue مثل المشتريات، و الإطارات المنبثقة، فارغةوأساليب أخرى كما يلي:
// Add container elements.
pqStudent1.push( Student( "Mark", 38 ) );
pqStudent1.push( Student( "Marc", 25 ) );
pqStudent1.push( Student( "Bill", 47 ) );
pqStudent1.push( Student( "Andy", 13 ) );
pqStudent1.push( Student( "Newt", 44 ) );

//Display container elements.
while ( !pqStudent1.empty() ) {
cout << pqStudent1.top().chName << endl;
pqStudent1.pop();
}

إتمام سرد التعليمات البرمجية

// The debugger cannot handle symbols that are longer than 255 characters.
// STL frequently creates symbols that are longer than 255 characters.
// When symbols are longer than 255 characters, the warning is disabled.
#pragma warning(disable:4786)
#include "stdafx.h"
#include <queue>

#using <mscorlib.dll>

#if _MSC_VER > 1020 // if VC++ version is > 4.2
using namespace std; // std c++ libs implemented in std
#endif
using namespace System;

//Define a custom data type.
class Student {
public:
char* chName;
int nAge;
Student(): chName(""),nAge(0){}
Student( char* chNewName, int nNewAge ):chName(chNewName), nAge(nNewAge){}
};

//Overload the < operator.
bool operator< (const Student& structstudent1, const Student &structstudent2)
{
return structstudent1.nAge > structstudent2.nAge;
}
//Overload the > operator.
bool operator> (const Student& structstudent1, const Student &structstudent2)
{
return structstudent1.nAge < structstudent2.nAge;
}

int _tmain()
{
//Declare a priority_queue and specify the ORDER as <
//The priorities will be assigned in the Ascending Order of Age
priority_queue<Student, vector<Student>,less<vector<Student>::value_type> > pqStudent1;

//declare a priority_queue and specify the ORDER as >
//The priorities will be assigned in the Descending Order of Age
priority_queue<Student, vector<Student>,greater<vector<Student>::value_type> > pqStudent2;

// Add container elements.
pqStudent1.push( Student( "Mark", 38 ) );
pqStudent1.push( Student( "Marc", 25 ) );
pqStudent1.push( Student( "Bill", 47 ) );
pqStudent1.push( Student( "Andy", 13 ) );
pqStudent1.push( Student( "Newt", 44 ) );

//Display container elements.
while ( !pqStudent1.empty() ) {
cout << pqStudent1.top().chName << endl;
pqStudent1.pop();
}
cout << endl;

// Add container elements.
pqStudent2.push( Student( "Mark", 38 ) );
pqStudent2.push( Student( "Marc", 25 ) );
pqStudent2.push( Student( "Bill", 47 ) );
pqStudent2.push( Student( "Andy", 13 ) );
pqStudent2.push( Student( "Newt", 44 ) );

//Display container elements.
while ( !pqStudent2.empty() ) {
cout << pqStudent2.top().chName << endl;
pqStudent2.pop();
}
cout << endl;

return 0;
}
ملاحظة: يجب إضافة خيار المحول البرمجي دعم وقت تشغيل اللغة العامة (/clr: oldsyntax) في Visual c + + 2005 ترجمة نموذج التعليمات البرمجية السابق بنجاح. لإضافة خيار المحول البرمجي دعم وقت تشغيل اللغة الشائعة في Visual c + + 2005، اتبع الخطوات التالية:

  1. انقر فوق المشروعومن ثم انقر فوق خصائص < اسم > المشروع .



    ملاحظة: < اسم > المشروع عنصرا نائبا لاسم المشروع.
  2. توسيع تكوين خصائص، وانقر فوق عام.

  3. انقر لتحديد دعم وقت تشغيل اللغة العامة, بناء الجملة القديمة (/clr: oldsyntax) في إعداد مشروع دعم "وقت تشغيل اللغة الشائعة" في الجزء الأيسر، انقر فوق تطبيق، ومن ثم انقر فوق موافق.

لمزيد من المعلومات حول وقت تشغيل اللغة العامة يدعم خيار برنامج التحويل البرمجي، قم بزيارة موقع Microsoft التالي على الويب:
(تجميع وقت تشغيل اللغة العامة) clr/
http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
العودة إلى أعلى

المراجع


للحصول على معلومات إضافية حول استخدام أعضاء الفئة priority_queue ، قم بزيارة مواقع ويب شبكة مطوري Microsoft (MSDN) التالية:
دالات priority_queue (نموذج STL)
http://msdn2.microsoft.com/en-us/library/z3k60dkc(VS.71).aspx
عودة إلى الأعلى