Maison >développement back-end >C++ >Comment utiliser correctement la fonction de tri C++ pour implémenter une fonction de tri personnalisée

Comment utiliser correctement la fonction de tri C++ pour implémenter une fonction de tri personnalisée

王林
王林original
2024-04-02 18:09:02689parcourir

La fonction de tri utilise une fonction de comparaison personnalisée pour implémenter un tri personnalisé : Écrivez une fonction de comparaison : spécifiez les règles de tri, définissez les types de paramètres et renvoyez les valeurs. Appelez la fonction de tri : transmettez la fonction de comparaison personnalisée comme troisième paramètre pour trier les éléments du conteneur. Exemple : Triez les entiers par ordre décroissant et les chaînes selon des règles personnalisées (chaîne vide en premier, longueur en premier, ordre lexicographique).

Comment utiliser la fonction de tri en C++ pour implémenter une fonction de tri personnalisée

La fonction sort est une fonction importante de la bibliothèque standard C++ et est utilisée pour trier les éléments dans un conteneur. Il reçoit une fonction de comparaison par référence, permettant à l'utilisateur de trier les éléments en fonction de critères personnalisés. sort 函数是 C++ 标准库中的一个重要函数,用于对容器中的元素进行排序。它以引用方式接收一个比较函数,允许用户根据自定义条件对元素进行排序。

比较函数的语法

比较函数的语法如下:

bool compare(const T1& a, const T2& b);

其中:

  • T1T2 是要比较的元素类型。
  • 返回 true 表示 a 小于 b
  • 返回 false 表示 a 大于或等于 b

实现定制排序

要使用 sort 函数实现定制排序,您需要编写一个指定排序行为的自定义比较函数。以下是一个示例:

#include <algorithm>
#include <vector>

using namespace std;

bool compareIntsDescending(int a, int b) {
  return a > b;
}

int main() {
  vector<int> numbers = {1, 5, 2, 4, 3};

  sort(numbers.begin(), numbers.end(), compareIntsDescending);

  for (auto& num : numbers) {
    cout << num << " ";
  }
  cout << endl;

  return 0;
}

这个程序的输出:

5 4 3 2 1

在这个例子中,compareIntsDescending

Syntaxe de la fonction de comparaison

La syntaxe de la fonction de comparaison est la suivante :

bool compareStrings(string a, string b) {
  // 检查是否为空字符串
  if (a.empty() && !b.empty()) {
    return true;
  } else if (!a.empty() && b.empty()) {
    return false;
  }

  // 空字符串相等
  if (a.empty() && b.empty()) {
    return false;
  }

  // 比较长度
  if (a.length() < b.length()) {
    return true;
  } else if (a.length() > b.length()) {
    return false;
  }

  // 长度相同时按字母顺序比较
  return (a < b);
}

Où :
  • T1 et T2 sont les types d'éléments à par rapport.
  • Renvoyer true pour indiquer que a est inférieur à b.

Renvoyer false pour indiquer que a est supérieur ou égal à b.

Implémentation d'un tri personnalisé

Pour implémenter un tri personnalisé à l'aide de la fonction sort, vous devez écrire une fonction de comparaison personnalisée qui spécifie le comportement de tri. Voici un exemple : 🎜
#include <algorithm>
#include <vector>

using namespace std;

int main() {
  vector<string> strings = {"apple", "banana", "cherry", "dog", "cat", ""};

  sort(strings.begin(), strings.end(), compareStrings);

  for (auto& str : strings) {
    cout << str << " ";
  }
  cout << endl;

  return 0;
}
🎜🎜La sortie de ce programme : 🎜🎜
 dog cat apple banana cherry
🎜Dans cet exemple, la fonction de comparaison compareIntsDescending trie les entiers du plus grand au plus petit. 🎜🎜🎜Cas pratique : Trier les chaînes selon des règles personnalisées🎜🎜🎜Supposons que vous disposiez d'un tableau de chaînes et que vous souhaitiez les trier selon les règles suivantes : 🎜🎜🎜Les chaînes vides sont triées en premier. 🎜🎜Les chaînes les plus longues sont triées en premier (ou par ordre alphabétique si la longueur est la même). 🎜🎜🎜 Vous pouvez écrire la fonction de comparaison suivante pour y parvenir : 🎜rrreee🎜 Ensuite, vous pouvez utiliser cette fonction de comparaison pour trier le tableau de chaînes comme ceci : 🎜rrreee🎜🎜Sortie de ce programme : 🎜🎜rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn