C++:比较字符串的字典顺序

4
当使用重载的bool operator<(const std::string & rhs)运算符进行比较时,字符串是否按字典顺序比较?例如:
std::string str1 = "aabbcc"
std::string str2 = "bbaacc"

(str1 < str2) == std::lexicographical_compare(str1.begin(),str1.end(),str2.begin(),str2.end()) // is this statement true?

1
是的,它们是相同的。如果字符串比较不按字典顺序执行,那就没有意义了。 - EdChum
1
@EdChum:实际上,这是有道理的。一些地区的比较并不是词典排序的。 - jpalecek
@jpalecek 嗯,我猜是这样。我倾向于总是在西方(ASCII)的领域考虑这些事情,感谢您提供的信息。 - EdChum
1个回答

7

是的。

String的比较运算符是根据其traits::compare(即char_traits ::compare)(C ++ 03 21.3.6.8)定义的,该运算符基于其参数的词典顺序返回一个值(21.1.1)。

X :: compare(p,q,n)...产生:如果对于[0,n)中的每个i, X :: eq(p [i],q [i])为true,则为0;否则,如果对于某个j在[0,n)中, X :: lt(p [j],q [j])为true,并且对于每个i在[0,j)中, X :: eq(p [i ],q [i])为真,则为负数;否则是正值。

实际上,这意味着字符串比较不能是区域设置敏感的(在某些区域设置中可能是非词典顺序的,例如我的区域设置)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接