C++中compare函数的使用

转载自 https://blog.youkuaiyun.com/qq_35038153/article/details/78191574

compare函数用来进行字符串以及其子串的比较,示例如下:

#include <iostream>
#include <string>
#include <cctype>
using std::cout;
using std::endl;
using std::cin;
using std::string;
int main(void){
	string str1="hi,test,hello";
	string str2="hi,test";
	//字符串比较
	if(str1.compare(str2)>0)
		printf("str1>str2\n");
	else if(str1.compare(str2)<0)
		printf("str1<str2\n");
	else
		printf("str1==str2\n");
	
	//str1的子串(从索引3开始,包含4个字符)与str2进行比较
	if(str1.compare(3,4,str2)==0)
		printf("str1的指定子串等于str2\n");
	else
		printf("str1的指定子串不等于str2\n");
	
	//str1指定子串与str2的指定子串进行比较
	if(str1.compare(3,4,str2,3,4)==0)
		printf("str1的指定子串等于str2的指定子串\n");
	else
		printf("str1的指定子串不等于str2的指定子串\n");
	
	//str1指定子串与字符串的前n个字符进行比较
	if(str1.compare(0,2,"hi,hello",2)==0)
		printf("str1的指定子串等于指定字符串的前2个字符组成的子串\n");
	else
		printf("str1的指定子串不等于指定字符串的前2个字符组成的子串\n");
	return 0;
	
}
### C++ 中 `std::sort` 的自定义比较函数用法C++ 中,`std::sort` 是标准库中的一个高效排序算法,位于 `<algorithm>` 头文件中。它允许通过提供自定义比较函数来控制排序的行为。以下是关于如何使用自定义比较函数的一些重要细节: #### 自定义比较函数的基本概念 为了实现特定的排序逻辑,可以向 `std::sort` 提供一个二元谓词作为第三个参数。该谓词接受两个元素并返回布尔值,指示第一个元素是否应排在第二个之前[^1]。 #### 使用 Lambda 表达式作为比较器 Lambda 表达式是一种简洁的方式,用于定义简单的匿名函数。下面是一个示例,展示如何按降序排列整数数组: ```cpp #include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> numbers = {5, 2, 9, 1, 5, 6}; // 使用 lambda 表达式定义降序排序规则 std::sort(numbers.begin(), numbers.end(), [](const int& a, const int& b) -> bool { return a > b; }); for (auto num : numbers) { std::cout << num << " "; } return 0; } ``` 在这个例子中,lambda 函数 `(a, b) -> bool { return a > b; }` 定义了一个降序排序规则。 #### 使用独立函数作为比较器 除了 lambda 表达式外,还可以传递普通的函数指针给 `std::sort`。例如: ```cpp bool compareDescending(const int& a, const int& b) { return a > b; } int main() { std::vector<int> numbers = {5, 2, 9, 1, 5, 6}; std::sort(numbers.begin(), numbers.end(), compareDescending); for (auto num : numbers) { std::cout << num << " "; } return 0; } ``` 这里,`compareDescending` 被用来指定降序排序规则。 #### 对复杂数据类型的排序 当处理更复杂的结构体或类时,可以通过成员变量定制排序行为。以下是对对象列表按照某个字段升序排序的例子: ```cpp struct Person { std::string name; int age; // 构造函数便于初始化 Person(std::string n, int a) : name(n), age(a) {} }; // 比较两个人的年龄 bool compareByAge(const Person& p1, const Person& p2) { return p1.age < p2.age; } int main() { std::vector<Person> people = {{"Alice", 30}, {"Bob", 25}, {"Charlie", 35}}; std::sort(people.begin(), people.end(), compareByAge); for (const auto& person : people) { std::cout << person.name << ": " << person.age << "\n"; } return 0; } ``` 此代码片段展示了基于 `Person` 类型的对象集合按年龄从小到大排序的过程。 #### 常见注意事项 - **稳定性**:默认情况下,`std::sort` 不保证稳定排序(即相等元素的原始顺序可能改变)。如果需要保持稳定性,则应该改用 `std::stable_sort`。 - **性能**:`std::sort` 实现的是快速排序变种,平均时间复杂度为 O(N log N),但在最坏情况下的表现取决于具体实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值