パラメータに応じてリストのstd :: listをソートしたいと思います。例:std :: listの並べ替え<myclass*> myclass :: operator [](int i)
class myclass
{
string name, surname;
public:
myclass() {}
~myclass() {}
string operator[](int i)
{
switch (i)
{
case 1: return name;
case 2: return surname;
}
}
};
template <typename T>
struct compare
{
int num;
indirect_compare() {}
indirect_compare(int i) : num(i) {}
~indirect_compare() {}
bool operator()(T * lhs, T * rhs) { return (*lhs)[num] < (*rhs)[num]; }
};
list<myclass*> lst;
int specified_by_user;
cin >> specified_by_user;
//later
lst.sort(compare<myclass>(specified_by_user));
これは問題なく動作しますが、正しいかどうかはわかりません。構造体のコンストラクタとデストラクタでメッセージを追加したとき、コンストラクタは一度しか呼び出されませんでしたが、デストラクタはたとえば9回呼び出されていました。なぜ起こったのかわかりません。私はそれを確認するためにこのプログラムをデバッグしようとしたが、私は理由を見つけることができませんでした。
ありがとうございました!
他のコンストラクタは、おそらくコピーctorのでした。あなたはそれを監視しましたか? – Sheph
比較のctorとdtorの名前はindirect_compareです。この例はコンパイルされていますか?また、使用するのが無効な場合は、引数なしのctorを取り除いてください。 – Sheph
「正しいかどうかわからない」と思っていますが、いくつかの方法がありますが、違いはありません – vu1p3n0x