У меня есть простой класс, который я храню в векторе в качестве указателей. Я хочу использовать находку на векторе, но он не может найти мой объект. После отладки он, похоже, не вызывает оператор ==, который я предоставил. Я могу «видеть» объект в отладчике, чтобы я знал его там. В приведенном ниже коде даже используется копия первого элемента в списке, но все еще не выполняется. Единственное, что я могу сделать, это использовать MergeLine * mlt = LineList.begin(), который показывает мне, что он сравнивает объекты и вообще не использует мой оператор равенства.std :: find not using my defined == operator
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;
}
};
веселит, Марк
Конечно, нет. 'a == b' не то же самое, что' * a == * b' ... –
Указатели являются встроенными типами, поэтому они не используют перегруженный 'operator ==' –
Любая конкретная причина, по которой вы сохранить в своих указателях вектора MergeLine вместо простых объектов MergeLine? Кроме того, не будет ли это более умным указателем, более подходящим для ваших нужд? – Antonio