web-dev-qa-db-ja.com

文字列の小なり比較演算子の使用

私はC++のチュートリアルに従っていて、文字列を見て、+ =、==、!=などの演算子でオーバーロードしていますが、現在は単純なifステートメントがあります

if(s1 < s2)
    cout << s2 <<endl;
else
  if(s2 < s1)
    cout << s1 << endl;
  else
    cout << "Equal\n";

しかし、これはどのように機能し、プログラムはどの文字列が他の文字列よりも大きいかをどのように決定しますか?周りを見回すと、基本的なテンプレートのデクレレーションが見つかりました。

template<class charT, class traits, class Allocator>
  bool operator< ( const basic_string<charT,traits,Allocator>& lhs,
                const basic_string<charT,traits,Allocator>& rhs );

これは<の仕組みを定義していますか?もしそうなら、どういう意味ですか/何をしますか?

また、次の演算子は文字列に意味がありますか? -=および* =

アドバイスは大歓迎です!

13
Dmist

文字列の小なり演算子は、文字列の辞書式比較を行います。これは、辞書順でリストされるのと同じ方法で文字列を比較し、文字以外の文字を含む文字列に対して機能するように一般化されています。

例えば:

"a" < "b"
"a" < "ab"
"A" < "a"             (Since A has ASCII value 65; a has a higher ASCII value)
"cat" < "caterpillar"

詳細については、std::lexicographical_compareアルゴリズム。小なり演算子が通常呼び出すアルゴリズム。

はどうかと言うと -=および*=、これらの演算子はどちらも文字列に対して定義されていません。定義されている唯一の「算術」演算子は+および+=、文字列連結を実行します。

お役に立てれば!

23
templatetypedef

比較演算子は、文字列の 辞書式順序 を実装します。

-=および*=は文字列に対して定義されていません。

2
NPE