オーバーロードされた<演算子を使用した挿入ソートを使用してポインターのベクトルを並べ替えようとしています(ライブラリーは使用できません)。次のような別のクラスを含むクラスがある。
class A {
vector<B*> v;
void order();
}
class B {
int id; //each one is unique
virtual double num() {} const;
bool operator<(const B* b2) const;
}
class B1: public B {
double num() {} const;
}
class B2: public B {
double num() {} const;
}
子ごとにnumの計算方法が異なり、最初の基準としてnumから返されたdoubleを使用し、次にidを使用して並べ替えが行われます。(インデントでごめんなさい)
void A::order() {
for (unsigned int p = 1; p < v.size(); p++)
{
ClassB* tmp = v[p];
int j;
for (j = p; j > 0 && tmp < v[j-1]; j--) // Error on this line
v[j] = v[j-1];
v[j] = tmp;
}
}
bool B::operator<(const B* b2) const {
cout << "Operator <\n";
if(this->num()!=b2->num())
return this->num()<b2->num();
return id<d2->id;
}
2つのポインターを比較しようとしたときに、なぜオペレーターが呼び出されないのか理解できません。