
STLのsort()の使い方が分からず困っています。
定義したクラスから生成したオブジェクト群を list で管理しています。
↓こんな形です。
class cMyClass
{
int m_Attr;
public:
cMyClass();
~cMyClass();
};
std :: list <cMyClass*> m_MyList;
m_MyList.push_back(new cMyClass);
m_MyList.push_back(new cMyClass);
...
この、m_MyListを cMyClass内の要素 m_Attr の大小でソートしたいのですが、どうにもやり方が分りません。。。
教えていただけないでしょうか。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
#include <list>
#include <cstdlib>
#include <ctime>
#include <iostream>
class cMyClass
{
public:
/* getter,setterを作るべきなのかわからん。一応比較用の関数で参照するのでpublicにした */
int m_Attr;
cMyClass(){
m_Attr = std::rand();
}
~cMyClass();
};
bool cMyClass_compare(cMyClass* a, cMyClass* b){
if (a->m_Attr < b->m_Attr){
return true;
}else{
return false;
}
}
int main(void){
std::srand(std::time(NULL));
std :: list <cMyClass*> m_MyList;
m_MyList.push_back(new cMyClass);
m_MyList.push_back(new cMyClass);
m_MyList.push_back(new cMyClass);
m_MyList.push_back(new cMyClass);
m_MyList.push_back(new cMyClass);
m_MyList.push_back(new cMyClass);
m_MyList.sort(cMyClass_compare);
for (std::list<cMyClass*>::iterator it=m_MyList.begin(); it!=m_MyList.end(); ++it){
std::cout << " " << (*it)->m_Attr;
}
}
No.2
- 回答日時:
こんばんは。
こんな感じ?Set/Getが無かったのでstatic/friendで触るようにしてます。
#include<stdio.h>
#include<list>
class cMyClass
{
int m_Attr;
public:
explicit cMyClass(int attr) : m_Attr(attr){}
~cMyClass(){}
//static members
//operator < (l, r)へ転送
static bool Less(const cMyClass* p, const cMyClass* q)
{
return *p < *q;
}
//std::for_eachのコールバック用(表示する)
static void Display(const cMyClass* p)
{
::printf("[m_Attr:%d] [pointer:%p]\n", p->m_Attr, p);
}
//operator
//二項演算子
friend bool operator < (const cMyClass& lhs, const cMyClass& rhs)
{
return lhs.m_Attr < rhs.m_Attr;
}
};
//test
void main()
{
std::list <cMyClass*> m_MyList;
m_MyList.push_back(new cMyClass(50));
m_MyList.push_back(new cMyClass(3));
m_MyList.sort(&cMyClass::Less);
std::for_each(m_MyList.begin(), m_MyList.end(), cMyClass::Display);
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) userformでSheetを選択して開くコード 1 2023/05/15 16:27
- C言語・C++・C# クラスのメンバ変数を基準に並べ替えをしたい 5 2022/12/25 17:40
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# メインプログラムに#include <algorithm>を書いて、 そのメインプログラムが // 3 2023/05/02 11:24
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- C言語・C++・C# C#のSystem.Windows.Media.Colorに関する質問です。 3 2022/05/18 11:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
iostream インクルード時に発生...
-
switch文のエラーについて
-
findnext();について
-
std::map の const 修飾について
-
Vectorのポインタが入ったvector
-
空白を含む名前のファイル等を
-
mainの外に変数 vs ポインタ渡し
-
MingwでC++のソースがコンパイ...
-
gccでコンパイル時のエラー
-
C++のifstreamの使い方
-
wstringの内容を表示させたい
-
空ENTERの判別
-
構造体に決められた文字列を入...
-
_tcscat がうまくいきません(V...
-
違い
-
VxWorks 6.4ソケット接続につい...
-
VC++で
-
OpenCVでRAW画像(カラー)を開...
-
C++で、テキストファイルを一行...
-
JPEGやPNGが読めるLoadImage関数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
なぜ、C++の標準ヘッダをインク...
-
switch文のエラーについて
-
VC++で文字列から任意の文字を...
-
構文エラーが出ているのですが...
-
gccでコンパイル時のエラー
-
空ENTERの判別
-
vectorのイテレータを大小比較...
-
JPEGやPNGが読めるLoadImage関数
-
C++で、テキストファイルを一行...
-
std::wstringのメモリリークに...
-
enumの値から定義名を文字列化...
-
CStringとString
-
#define中の#のエスケープ
-
std::map の const 修飾について
-
#include "fstream.h"
-
_tcscat がうまくいきません(V...
-
C言語のポインターで詰まっている
-
構造体配列のvectorへの変換と...
-
C++での <iostream.h>と<iostre...
-
ヘッダーファイルがインクルー...
おすすめ情報