Wörter zählen

Zeigt, wie der Map-Reduce-Algorithmus verwendet werden kann.

Das Beispiel Qt Concurrent Word Count demonstriert die Verwendung des Map-Reduce-Algorithmus, wenn er auf das Problem des Zählens von Wörtern in einer Sammlung von Dateien angewendet wird.

Zunächst startet die Anwendung einen QFileDialog, um einen Startpfad auszuwählen, und gibt dann die Ausgabe auf der Konsole aus.

Ausführen des Beispiels

Zum Ausführen des Beispiels von Qt Creatorauszuführen, öffnen Sie den Modus Welcome und wählen Sie das Beispiel aus Examples aus. Weitere Informationen finden Sie unter Erstellen und Ausführen eines Beispiels.

Vergleichen der Operationen

Vergleichen Sie einen sequenziellen Single-Thread-Ansatz zum Zählen der Wörter in den Textdateien mit einem Multithreading-Ansatz mit mappedReduced():

    ...
    WordCount total = singleThreadedWordCount(files);
    ...
    WordCount total = QtConcurrent::mappedReduced(files, countWords, reduce).result();
    ...

Das erste Argument der Funktion mappedReduced ist der zu bearbeitende Container. Das zweite Argument ist die Mapping-Funktion countWords(). Sie wird parallel von mehreren Threads aufgerufen. Das dritte Argument ist die Reduktionsfunktion reduce(). Sie wird für jedes von der Abbildungsfunktion zurückgegebene Ergebnis einmal aufgerufen und erzeugt das endgültige Berechnungsergebnis.

Die Funktion gibt ein QFuture Objekt vom Typ WordCount zurück. Rufen Sie die Funktion result sofort auf diesem QFuture auf, um die weitere Ausführung zu blockieren, bis das Ergebnis verfügbar ist.

Hinweis: Die Mapping-Funktion muss thread-sicher sein, da sie von mehreren Threads aus aufgerufen wird.

Beispielprojekt @ code.qt.io

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.