lexicographical_compare用于判断第一个序列是否字典序小于第二个序列,逐元素比较,若某元素较小则返回true,若为前缀则较短序列更小,支持自定义比较函数。

lexicographical_compare 是 C++ STL 中用于按字典序比较两个序列的算法,常用于判断一个序列是否在字典序上小于另一个序列。它定义在
基本语法
函数模板原型如下:
bool lexicographical_compare(Iterator1 first1, Iterator1 last1,Iterator2 first2, Iterator2 last2);
该函数比较 [first1, last1) 和 [first2, last2) 两个左闭右开区间所表示的序列。如果第一个序列在字典序上小于第二个序列,返回 true;否则返回 false。
还支持自定义比较函数:
立即学习“C++免费学习笔记(深入)”;
bool lexicographical_compare(Iterator1 first1, Iterator1 last1,Iterator2 first2, Iterator2 last2,
Compare comp);
其中 comp 是一个可调用对象(函数指针或函数对象),用于定义元素之间的比较规则。
使用场景与示例
常见于字符串、字符数组或数值序列的字典序判断。例如:
95Shop可以免费下载使用,是一款仿醉品商城网店系统,内置SEO优化,具有模块丰富、管理简洁直观,操作易用等特点,系统功能完整,运行速度较快,采用ASP.NET(C#)技术开发,配合SQL Serve2000数据库存储数据,运行环境为微软ASP.NET 2.0。95Shop官方网站定期开发新功能和维护升级。可以放心使用! 安装运行方法 1、下载软件压缩包; 2、将下载的软件压缩包解压缩,得到we
#include
#include
using namespace std;
int main() {
vector
vector
bool result = lexicographical_compare(
a.begin(), a.end(),
b.begin(), b.end());
cout
string s1 = "apple";
string s2 = "banana";
cout s2.begin(), s2.end())
apple" 在字典序中小于 "banana"
return 0;
}
注意事项
lexicographical_compare 按元素逐个比较,规则如下:
- 从两个序列的起始位置开始,逐对比较对应元素
- 一旦发现某对元素不等,即根据这对元素的大小关系决定结果
- 如果一个序列是另一个的前缀,则较短的序列字典序更小
- 若两个序列完全相同,返回 false(因为不满足“小于”)
例如:
vectorvector
lexicographical_compare(v1.begin(), v1.end(), v2.begin(), v2.end()); // true
因为 v1 是 v2 的前缀,所以 v1 字典序更小。
自定义比较函数
可以传入自定义比较函数实现不同排序逻辑。例如按降序比较:
bool greater_char(char a, char b) {return a > b;
}
string x = "ba";
string y = "ab";
lexicographical_compare(x.begin(), x.end(), y.begin(), y.end(), greater_char); // false
此时使用大于号比较,相当于按降序排列规则判断。
基本上就这些。lexicographical_compare 是实现字典序判断的底层工具,标准容器如 string 和 vector 的 operator









