对字符串使用小于比较运算符
Using the less than comparison operator for strings
我正在遵循C++教程,并查看字符串并使用+=
,==
,!=
等运算符重载。 目前我有一个简单的if语句:
if(s1 < s2)
cout << s2 <<endl;
else
if(s2 < s1)
cout << s1 << endl;
else
cout << "Equaln";
但是这是如何工作的,程序如何决定哪个字符串大于另一个字符串?环顾四周,我找到了一个基本的模板声明:
template<class charT, class traits, class Allocator>
bool operator< ( const basic_string<charT,traits,Allocator>& lhs,
const basic_string<charT,traits,Allocator>& rhs );
这是否定义了<
的工作方式?如果是这样,<charT,traits,Allocator>
是什么意思/做什么?
以下运算符对字符串有什么意义吗? -=
和*=
字符串上的小于运算符对字符串进行字典顺序比较。 这将以与按字典顺序列出的字符串相同的方式比较字符串,通用化为适用于具有非字母字符的字符串。
例如:
"a" < "b"
"a" < "ab"
"A" < "a" (Since A has ASCII value 65; a has a higher ASCII value)
"cat" < "caterpillar"
有关详细信息,请查看小于运算符通常调用的std::lexicographical_compare
算法。
至于-=
和*=
,这两个运算符都没有在字符串上定义。 唯一定义的"算术"运算符是+
和+=
,它们执行字符串连接。
希望这有帮助!
比较运算符实现字符串的字典排序。
未为字符串定义-=
和*=
。
相关文章:
- 为什么比较运算符如此快速
- 布尔比较运算符是如何在C++中工作的
- 关于 std::min, std::max 中的比较运算符的混淆
- 三向比较运算符成员与非成员实现
- 标准::可选枚举的比较运算符
- C++分数混合比较运算符错误
- 不能将重载比较运算符与 Catch 测试一起使用
- 重构使用动态强制转换的 std::set 的比较运算符
- 为什么我的比较运算符不比较我的点长和双精度值?
- 高效简单的结构比较运算符
- 如何实现 Boost.Hana 结构的相等比较运算符?
- 为什么sub_match和basic_string比较运算符使用额外的字符串副本实现?
- 是否可以在C++中使用三元运算符在 if 语句中选择比较运算符?
- 在priority_queue的自定义类中重载比较运算符
- 为什么C++容器之间存在比较运算符
- 尝试使用比较运算符对对象向量进行排序
- C++复合逻辑运算符不使用比较运算符
- C++:比较运算符>和字符串文本的意外结果
- 重载对象成员的比较运算符
- 比较运算符==中的对象指针