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?
4

1 回答 1

6

是的。

字符串的比较运算符是根据它的traits::compare(即char_traits<char>::compare)(C++03 21.3.6.8)定义的,它被指定为根据其参数的字典顺序返回一个值(21.1.1)。

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

实际上,这意味着比较字符串不能对语言环境敏感(在某些语言环境中可能是非字典式的,例如我的)。

于 2012-04-08T20:47:27.143 回答