📅  最后修改于: 2023-12-03 15:08:34.959000             🧑  作者: Mango
对字符串进行排序是处理字符串的常见操作之一。在 C++ 中,我们可以使用多种方法对字符串进行排序,本文将介绍几种实现方法。
C++ 中有一个标准库函数 sort,可以用于快速对 vector 容器中的元素进行排序,string 类型也是可以排序的,因为 string 也被实现为一个容器。sort 函数的基本用法如下:
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main() {
string s = "ratdogcat";
sort(s.begin(), s.end());
cout << s << endl;
return 0;
}
结果输出为:acdgorrt。
该方法的时间复杂度为 O(n log n),效率比较高。
如果想要按照一定的规则排序,比如按字符串长度排序,我们就需要使用自定义比较函数。自定义比较函数需要满足严格弱序关系,即满足反身性、对称性和传递性,并且返回为 bool 类型。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool cmp(string a, string b) {
return a.size() < b.size();
}
int main() {
string s[5] = {"rat", "dog", "cat", "parrot", "fish"};
sort(s, s + 5, cmp);
for (int i = 0; i < 5; i++) {
cout << s[i] << endl;
}
return 0;
}
结果输出为:
cat
rat
dog
fish
parrot
该方法的时间复杂度为 O(n log n)。
在 C++11 引入的 lambda 表达式可以让我们更加方便地编写自定义的比较函数。使用 lambda 表达式可以将自定义比较函数写入 sort 函数中,不用再定义额外的函数。
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string s[5] = {"rat", "dog", "cat", "parrot", "fish"};
sort(s, s + 5, [](string a, string b){return a.size() < b.size();});
for (int i = 0; i < 5; i++) {
cout << s[i] << endl;
}
return 0;
}
结果输出为:
cat
rat
dog
fish
parrot
该方法的时间复杂度为 O(n log n)。
本文介绍了 C++ 中排序字符串的三种方法:使用 sort 函数、使用自定义比较函数以及使用 lambda 表达式。根据不同的需求选用不同的方法,能够大大提高程序的效率。