Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird beschrieben, wie Sie eine STANDARD Template Library (STL) priority_queue
-Vorlagenadapterklasse definieren, die benutzerdefinierte (benutzerdefinierte) Datentypen verwendet.
Originalproduktversion: Visual C++
Ursprüngliche KB-Nummer: 837697
Zusammenfassung
In diesem Artikel wird beschrieben, wie Sie die STL-Vorlagencontaineradapterklasse priority_queue
mit benutzerdefinierten (benutzerdefinierten) Datentypen wie Strukturen und Klassen verwenden. In diesem Artikel wird auch beschrieben, wie Sie die priority_queue
Klassenmber anordnen, indem Sie die eckige eckige Klammer () oder die Vergleichsoperatoren des rechten Winkels (<>) überladen. In diesem Artikel wird auch beschrieben, wie Sie die priority_queue
Containerklassenvariablen deklarieren, die die benutzerdefinierten (benutzerdefinierten) Datenmmber enthalten und wie Sie in Ihrem Programm auf diese Variablen zugreifen. Die Informationen in diesem Artikel gelten nur für nicht verwalteten Visual C++-Code.
Anforderungen
In diesem Artikel wird davon ausgegangen, dass Sie mit der Programmierung mit STL-Datentypen und Containertypen vertraut sind.
Erstellen eines benutzerdefinierten Datentyps
Die priority_queue
Klasse ist eine Vorlagencontaineradapterklasse, die den Zugriff auf das oberste Element eines zugrunde liegenden Containertyps beschränkt. Um den Zugriff auf das oberste Element eines zugrunde liegenden Containertyps einzuschränken, ist immer die höchste Priorität. Sie können der priority_queue
Klasse neue Elemente hinzufügen und das oberste Element der priority_queue
Klasse untersuchen oder entfernen.
Um die priority_queue
Klasse mit den benutzerdefinierten (benutzerdefinierten) Datentypen zu verwenden, müssen Sie einen benutzerdefinierten Datentyp definieren, wie im folgenden Code gezeigt:
//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){}
};
Notiz
Um eine Struktur für denselben Zweck zu definieren, können Sie sie in diesem Codebeispiel ersetzen class
struct
.
Warteschlangenreihenfolge angeben
Sie können die Reihenfolge der priority_queue
Klassenmber angeben, indem Sie die rechte winkelige Klammer oder die Vergleichsoperatoren für die linke Winkelklammer überladen, wie im folgenden Codebeispiel gezeigt:
//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;
}
Erstellen und Zugreifen auf priority_queue Variablen mit benutzerdefinierten Datentypen
Der Prototyp der priority_queue
Vorlagenklasse lautet wie folgt:
template <
class Type,
class Container=vector<Type>,
class Compare=less<typename Container::value_type>
>
class priority_queue
Deklarieren Sie eine priority_queue
Variable, die den benutzerdefinierten Datentyp und den Vergleichsoperator wie folgt angibt:
priority_queue<Student, vector<Student>,less<vector<Student>::value_type> > pqStudent1;
Sie können verschiedene Methoden der priority_queue
Klasse wie push
pop
empty
folgt verwenden:
// 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();
}
Vollständige Codeliste
// 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;
}
}
Sie müssen die Common Language Runtime-Unterstützungscompileroption (/clr:oldSyntax) in Visual C++ hinzufügen, um das vorherige Codebeispiel erfolgreich zu kompilieren. Führen Sie die folgenden Schritte aus, um die Compileroption für die Common Language Runtime-Unterstützung in Visual C++ hinzuzufügen:
Klicken Sie auf "Projekt" und dann auf< "ProjectName-Eigenschaften>".
Notiz
<ProjectName> ist ein Platzhalter für den Namen des Projekts.
Erweitern Sie konfigurationseigenschaften, und wählen Sie dann "Allgemein" aus.
Wählen Sie "Common Language Runtime-Unterstützung", "Alte Syntax(/clr:oldSyntax)" in der Supportprojekteinstellung "Common Language Runtime" im rechten Bereich aus, wählen Sie "Übernehmen" und dann "OK" aus.
Weitere Informationen zur Compileroption zur Unterstützung der Common Language Runtime finden Sie unter /clr (Common Language Runtime Compilation).For more information about the common language runtime support compiler option, see /clr (Common Language Runtime Compilation).