2012-04-08 12 views
2

オーバーライドされたbool operator<(const std::string & rhs)演算子を使用すると、文字列が辞書編集と比較されますか?例:C++:文字列の辞書編集の比較

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

+0

@jpalecekうーん、私はいつも西部(ASCII)の土地でこれらのことを考える傾向があるので、情報を歓迎します。 – EdChum

答えて

6

はい。

文字列の比較演算子は、その引数(21.1.1)の辞書式順序に基づいて値を返すように指定されているそのtraits::compare(つまりchar_traits<char>::compareある)(C++ 03 21.3.6.8)で定義されています。

X ::比較(P、Q、N)...収量:0であれば、各iについて、[0、N)、 X :: EQ(P [i]は、内のQ [i])と真実です。 [0、n]内のいくつかのjの場合、 の値 X :: lt(p [j]、q [j])が真であり、各iについて [0、j] X :: eq(p [i]、q [i])は真です。そうでなければ正の値。

実際には、比較文字列はロケールに敏感であってはならないことを意味します(これは、鉱山のような一部のロケールでは非辞書的である可能性があります)。