วิธีการใช้คลา PRIORITY_QUEUE STL ด้วยชนิดที่กำหนดเอง

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 837697
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

บทนำ

บทความนี้อธิบายวิธีการใช้มาตรฐานแม่แบบของไลบรารี (STL)priority_queueแม่แบบคอนเทนเนอร์อะแด็ปเตอร์คลากับข้อมูล (ผู้ใช้กำหนด) แบบกำหนดเองชนิดเช่นโครงสร้างและคลาส บทความนี้ยังอธิบายวิธีการสั่งซื้อนี้priority_queueสมาชิกคลา โดย overloading ตัวดำเนินการเปรียบเทียบวงเล็บมุมซ้าย "<" or="" the="" right="" angle="" bracket="" "="">" บทความนี้ยังอธิบายวิธีการประกาศ</">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){}
};
หมายเหตุ:เมื่อต้องการกำหนดเป็นโครงสร้างเพื่อจุดประสงค์เดียวกัน คุณสามารถแทนคลาสwith:structในตัวอย่างโค้ดนี้

ระบุลำดับคิว

คุณสามารถระบุลำดับของการpriority_queueคลาสสมาชิก โดย overloading วงเล็บเหลี่ยมมุมขวา " <" or="" the="" left="" angle="" bracket="" "="">" ตัวดำเนินการเปรียบเทียบดังที่แสดงในตัวอย่างรหัสต่อไปนี้: </">
//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คลาเช่นกด,pop,ว่างเปล่าและวิธีการอื่น ๆ ดัง:
// 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. คลิกProjectแล้ว คลิก<projectname></projectname>คุณสมบัติ.

    หมายเหตุ:<projectname></projectname>เป็นตัวยึดสำหรับชื่อของโครงการ
  2. ขยายคุณสมบัติการตั้งค่าคอนฟิกแล้ว คลิกทั่วไป.
  3. คลิกเพื่อเลือกสนับสนุนการรันไทม์ภาษาที่พบโดยทั่วไป ไวยากรณ์เก่า (/ clr:oldSyntax)ในการการสนับสนุนการรันไทม์ภาษาที่พบโดยทั่วไปโครงการการตั้งค่าในบานหน้าต่างด้านขวา คลิกนำไปใช้แล้ว คลิกตกลง.
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้งานจริงภาษาทั่วไปสนับสนุนตัวเลือกของคอมไพเลอร์ เยี่ยมชมเว็บไซต์ต่อไปนี้ของ Microsoft:
/clr (คอมโดยทั่วไปภาษารันไทม์ไพล์)
http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx

ข้อมูลอ้างอิง

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้priority_queueคลาสสมาชิก แวะไปที่เว็บไซต์ของ Microsoft สำหรับนักพัฒนาเครือข่าย (MSDN) ต่อไปนี้:
ฟังก์ชัน priority_queue (ตัวอย่าง STL)
.aspx http://msdn2.microsoft.com/en-us/library/z3k60dkc (VS.71)
priority_queue::priority_queue
.aspx http://msdn2.microsoft.com/en-us/library/6w541ec5 (vs.71)

คุณสมบัติ

หมายเลขบทความ (Article ID): 837697 - รีวิวครั้งสุดท้าย: 18 ตุลาคม 2553 - Revision: 2.0
Keywords: 
kbtemplate kbstl kblangcpp kbconsole kbsample kbcodesnippet kbcode kbhowtomaster kbmt KB837697 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:837697

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com