MFC CMapとSTL mapの使用法について – プログラミング – Home

通知
すべてクリア

MFC CMapとSTL mapの使用法について


てんてく
 てんてく
(@てんてく)
ゲスト
結合: 20年前
投稿: 92
Topic starter  

お久しぶりです。
std::mapのキーとなるクラスとして
class CKey
{
int flag1;
int flag2;
int flag3;
int flag4;

bool operator<(const CKey& src){
if(flag1<src.flag1)
return true;
if(flag2<src.flag2)
return true;
if(flag3<src.flag3)
return true;
if(flag4<src.flag4)
return true;
return false;
};
};
また、
bool operator< (const CKey & first, const CKey & second)
{
return (first < second);
};

このキーにてstd::mapを使用したところ挿入時に
bool operator< (const CKey & first, const CKey & second)
のところでスタックオーバフローのエラーが出て原因がわからず困っています。
何か間違いがありましたらご教授ください。

原因を調べる時間が無かったのでMFCのCMapを使ったのですが、
このキーに対するMFCのヘルパー関数をどうやってオーバーライドしてよいかも
わからず、仕方なくこのCKeyをInt値に置き換えてキーがIntのmapで代用しています。
ヘルパー関数のオーバーライドの仕方についてご教授ください。
できればソースコードで・・。

私はまだテンプレートのコードは読めないので仕様をみて
使ってみた、というレベルです。
環境はWin2000、VC++6.0です。よろしくお願いします。


引用解決済
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

bool operator< (const CKey & first, const CKey & second)
{
return (first < second);
};

この関数は、2つの CKey を比較( first < second )するときに
呼び出される関数です。

その関数の中で、 first < second とすると、無限ループとなってしまいます。


返信引用
REE
 REE
(@REE)
ゲスト
結合: 23年前
投稿: 240
 

解決方法としては、メンバ関数のbool operator<(const CKey& src)をpublicにした上
で、グローバル関数の方を削除すればよいでしょう。


返信引用
てんてく
 てんてく
(@てんてく)
ゲスト
結合: 20年前
投稿: 92
Topic starter  

>dairygoodsさん
>REEさん

すばやい回答ありがとうございます。class CKeyのメンバは全部publicです、書き忘れてしま
いました。ですが、グローバルのoperator<を削除するとコンパイルエラーがでますよね?
とりあえず、
bool operator< (const CKey & first, const CKey & second)
{
// return (first < second);
if(first.flag1 < second.flag1)
return true;
....

};

としたらうまく行きました。


返信引用
てんてく
 てんてく
(@てんてく)
ゲスト
結合: 20年前
投稿: 92
Topic starter  

あ、あとMFCのほう知ってらしたらよろしくお願いします。


返信引用
REE
 REE
(@REE)
ゲスト
結合: 23年前
投稿: 240
 

>ですが、グローバルのoperator<を削除するとコンパイルエラーがでますよね?

エラーメッセージが分からないので、推測ですが、
おそらく、以下のようにconstを入れるとエラーが出なくなるでしょう。

bool operator<(const CKey& src) const{

CMapの方は、以下を参考に、必要と思われるものを実装してください。

http://www.microsoft.com/japan/msdn/library/default.asp?
url=/japan/msdn/library/ja/vclib/html/_mfc_collection_class_helpers.asp


返信引用
てんてく
 てんてく
(@てんてく)
ゲスト
結合: 20年前
投稿: 92
Topic starter  

>おそらく、以下のようにconstを入れるとエラーが出なくなるでしょう。
推測どおりでした。
const入れたら出なくなりましたので、グローバルのほうは削除しました。
ありがとうございます。

CMapのほうはヘルプ見ても理解できなかったので・・・。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました