[cppll:13000] Re: std::map のキーにオブジェクトのインスタンスを使用する
- Subject:
- [cppll:13000] Re: std::map のキーにオブジェクトのインスタンスを使用する
- From:
- cb <sumiaki@...>
- Date:
- Fri, 15 Jun 2007 19:47:21 +0900
- X-Mailer:
- Denshin 8 Go V32.1.5.3 on Windows 5.01.2600 Service Pack 2
- Message-Id:
- <200706151047.l5FAlMSR025729‐at‐mx55.ms.so-net.ne.jp>
- In-Reply-To:
- 12998
- References:
- 12985 12986 12990 12995 12998
cbです。
> 演算子の両辺が異なる型のとき、メンバ関数では対応できなくなることがあります。
>
> class String {
> public:
> bool operator==(const char* rhs);
> ...
> };
>
> なんて定義だと x == "ほげ" できるけど "ほげ" == x できんです。
>
ああ、ありましたね。
bool operator == ( const String& srcL, const char& srcR ) { }
bool operator == ( const char* srcL, const String& srcR ) { }
としておけば、両方に対応できるってやつですね。
> 演算子の両辺が異なる型のとき、メンバ関数では対応できなくなることがあります。
>
> class String {
> public:
> bool operator==(const char* rhs);
> ...
> };
>
> なんて定義だと x == "ほげ" できるけど "ほげ" == x できんです。
>
ああ、ありましたね。
bool operator == ( const String& srcL, const char& srcR ) { }
bool operator == ( const char* srcL, const String& srcR ) { }
としておけば、両方に対応できるってやつですね。
▼ スレッド
- 12985: std::mapの使用方法に関してご教示頂きたくメールする次第です。 下記のように map< CLevelPos, InfoPt take_de_x
- ├12986: mapや、set でキーとなるためというより、 obj1 < obj2 が成立する場合、 obj2 < obj1 が絶対に成立し とっちゃん(高萩 俊行)
- │└12990: そのように operator < () を定義したかったのですが、自分の視野が狭かった ようです^^; map,set が take_de_x
- │ ├12991: このあたりは、「プログラミング言語C++第3版」 17.1.4.1, 17.1.4.2 に詳しく書いてあります。 Akihiko Matuura
- │ │└12994: 再勉強したいと思います。 take_de_x
- │ ├12992: 蛇足ですが、else は意味が無いので、つけないほうが見た目がすっきりしますね。 if( level < src.l INADA Naoki
- │ │└12996: 稲田さん、とっちゃんさん、ソースコードの記述方法に関してのアドバイスあり がとうござい take_de_x
- │ ├12993: 書き方として、else や operator<() で統一するかは、 コーディングスタイルなどもあるので、どち とっちゃん(高萩 俊行)
- │ │└12997: ですねー。 今後(近い将来)の拡張が見込まれてるならきっちり形式化しておくが吉でしょね。 FUKUDA, Fumiki
- │ ├12995: 横から質問ですみません。 私の場合、比較演算子のオーバロードはメンバ関数ではなくフレン cb
- │ │└12998: しょうか? 演算子の両辺が異なる型のとき、メンバ関数では対応できなくなることがあります。 FUKUDA, Fumiki
- │ │ └13000: ああ、ありましたね。 bool operator == ( const String& srcL, const char& srcR ) { } bool operator == ( const char* srcL cb
- │ └12999: 少しわき道に逸れますが、メンバー変数 A, B, C ...., Z があるときには operator == が定義されてい Masahiro Kasahara
- ├12987: これだと、level > src.level のとき、 pos < src.pos で true を返すからまずいのかな? if ( level < src.level ) cppll‐at‐denchu.jp
- ├12988: えと、まずlevelの大小で判定し、決着がつかない(levelが等値)ならposで判断す りゃいいのですよ FUKUDA, Fumiki
- └12989: 初投稿させていただきます。Akifuと申します。 これでは、level > src.levelのとき(明らかにfalseを返 渡辺昭文