[C++] STL-Algorithmus ⑨ (Beispiel für ein vordefiniertes Funktionsobjekt – Containerelemente von groß nach klein sortieren | Sortieralgorithmus sortieren | größer < T > vordefiniertes Funktionsobjekt)





1. Beispiel eines vordefinierten Funktionsobjekts – Containerelemente von groß nach klein sortieren



1. Sortieralgorithmus sortieren


Die C++-Standardvorlagenbibliothek (STL, Standard Template Library) stellt die Sortieralgorithmusfunktion bereit, die in der Headerdatei <algorithm> definiert ist und ein generischer Algorithmus ist;

Der Sortieralgorithmus wird zum Sortieren von Elementen in einem Container verwendet . Dieser Algorithmus ist sehr effizient und kann Elemente innerhalb eines bestimmten Iteratorbereichs sortieren . Die Sortierreihenfolge kann basierend auf einer vom Benutzer angegebenen Vergleichsfunktion definiert werden.

Die vom Benutzer angegebene Vergleichsfunktion ist ein binäres Prädikat;


Der Funktionsprototyp der Standardsortierregel des std::sort-Algorithmus lautet wie folgt:

template< class RandomIt >  
void sort( RandomIt first, RandomIt last );  
  • Parameter „RandomIt first“, „RandomIt last“: Diese Funktion akzeptiert zwei Iteratoren mit wahlfreiem Zugriff „first“ und „last“ , die den Sequenzbereich definieren, der sortiert werden muss. Hinweis: Dieser Bereich ist ein zuerst geschlossenes und dann offenes Intervall;
  • Standardvergleichsregeln: Elemente in diesem Bereich werden standardmäßig mit dem Operator < verglichen und sortiert . Wenn eine benutzerdefinierte Klasse die überladene Funktion des Operators < nicht implementiert, wird möglicherweise ein Fehler gemeldet.

Der Funktionsprototyp der benutzerdefinierten Sortierregel des std::sort-Algorithmus lautet wie folgt:

template< class RandomIt, class Compare >  
void sort( RandomIt first, RandomIt last, Compare comp );
  • Parameter „RandomIt first“, „RandomIt last“: Diese Funktion akzeptiert zwei Iteratoren mit wahlfreiem Zugriff „first“ und „last“ , die den Sequenzbereich definieren, der sortiert werden muss. Hinweis: Dieser Bereich ist ein zuerst geschlossenes und dann offenes Intervall.
  • Benutzerdefinierte Vergleichsregel Comp-Parameter vergleichen: Dieser Parameter ist ein binäres Prädikat, d. h. ein Funktionsobjekt, das zwei Parameter empfängt und einen Bool-Wert zurückgibt. Die Elemente in diesem Bereich werden mithilfe dieser binären Prädikatsregel sortiert.

2. Größeres vordefiniertes Funktionsobjekt


Die C++-Standardvorlagenbibliothek (STL, Standard Template Library) stellt das vordefinierte Funktionsobjekt „Greater<T>“ bereit , bei dem es sich um ein binäres Prädikat handelt . Mit Hilfe dieses Funktionsobjekts können zwei Werte auf bequeme Weise verglichen werden, um die zu bestimmen erster Wert. Ist er größer als der zweite Wert?

Dieses Funktionsobjekt wird hauptsächlich in STL-Algorithmen verwendet, um Sortierreihenfolge, Suchbedingungen und andere Szenarien zu steuern;


Das Funktionsobjekt „Greater<T>“ ist in der Headerdatei „<Functional>“ definiert. Es akzeptiert einen generischen Typparameter T, der den zu vergleichenden Elementtyp angibt.

Das Funktionsobjekt „Greater<T>“ überlädt intern den Funktionsaufrufoperator „operator()“, sodass Instanzobjekte dieser Klasse wie gewöhnliche Funktionen aufgerufen werden können.





2. Codebeispiele – vordefinierte Funktionsobjekte



1. Codebeispiele


Codebeispiel:

#include "iostream"
using namespace std;
#include <vector>
#include <algorithm>
#include "functional"

int main() {
    
    

	// 创建一个 set 集合容器
	vector<int> myVector;

	// 向容器中插入元素
	myVector.push_back(9);
	myVector.push_back(5);
	myVector.push_back(2);
	myVector.push_back(7);

	// 向 foreach 循环中传入 Lambda 表达式
	for_each(myVector.begin(), myVector.end(), [](int a) {
    
    
		std::cout << a << " ";
		});
	cout << endl;


	// 将 myVector 容器中的元素按照从大到小的顺序排列
	sort(myVector.begin(), myVector.end(), greater<int>());

	// 向 foreach 循环中传入 Lambda 表达式
	for_each(myVector.begin(), myVector.end(), [](int a) {
    
    
		std::cout << a << " ";
		});
	cout << endl;

	
	// 控制台暂停 , 按任意键继续向后执行
	system("pause");
	return 0;
};

2. Ausführungsergebnisse


Ergebnisse der:

9 5 2 7
9 7 5 2
Drücken Sie eine beliebige Taste, um fortzufahren. . .

Fügen Sie hier eine Bildbeschreibung ein

Ich denke du magst

Origin blog.csdn.net/han1202012/article/details/135493770