ポインターとしてベクターに格納している単純なクラスがあります。ベクトルで検索を使用したいのですが、オブジェクトが見つかりません。デバッグ時に、私が提供した == 演算子を呼び出していないようです。デバッガーでオブジェクトを「見る」ことができるので、そこにあることがわかります。以下のコードは、リストの最初の項目のコピーを使用していますが、それでも失敗します。これを通過させる唯一の方法は、MergeLine* mlt = LineList.begin() を使用することです。これは、オブジェクトを比較していて、等値演算子をまったく使用していないことを示しています。
class MergeLine {
public:
std::string linename;
int StartIndex;
double StartValue;
double FidStart;
int Length;
bool operator < (const MergeLine &ml) const {return FidStart < ml.FidStart;}
bool operator == (const MergeLine &ml) const {
return linename.compare( ml.linename) == 0;}
};
Class OtherClass{
public:
std::vector<MergeLine*>LineList;
std::vector<MergeLine*>::iterator LL_iter;
void DoSomething( std::string linename){
// this is the original version that returned LineList.end()
// MergeLine * mlt
// mlt->linename = linename;
// this version doesn't work either (I thought it would for sure!)
MergeLine *mlt =new MergeLine(*LineList.front());
LL_iter = std::find(LineList.begin(), LineList.end(), mlt);
if (LL_iter == LineList.end()) {
throw(Exception("line not found in LineList : " + mlt->linename));
}
MergeLine * ml = *LL_iter;
}
};
乾杯、マーク