【发布时间】:2015-05-22 21:54:05
【问题描述】:
我正在尝试在以下向量上使用 std::find:
std::vector<LoopDetectorData *> Vec_loopDetectors;
这就是我使用它的方式:
const LoopDetectorData *searchFor = new LoopDetectorData( (*it).c_str(), "", vehicleName.c_str() );
std::vector<LoopDetectorData *>::iterator counter = std::find(Vec_loopDetectors.begin(), Vec_loopDetectors.end(), searchFor);
这是带有 operator == 重载的 LoopDetectorData 类的定义。
class LoopDetectorData
{
public:
char detectorName[20];
char lane[20];
char vehicleName[20];
double entryTime;
double leaveTime;
double entrySpeed;
double leaveSpeed;
LoopDetectorData( const char *str1, const char *str2, const char *str3, double entryT=-1, double leaveT=-1, double entryS=-1, double leaveS=-1 )
{
strcpy(this->detectorName, str1);
strcpy(this->lane, str2);
strcpy(this->vehicleName, str3);
this->entryTime = entryT;
this->leaveTime = leaveT;
this->entrySpeed = entryS;
this->leaveSpeed = leaveS;
}
friend bool operator== (const LoopDetectorData &v1, const LoopDetectorData &v2);
};
似乎std::find 无法找到一个项目,即使该项目存在于向量中。
【问题讨论】:
-
您不能为内置类型重载运算符,包括指针。
-
您的
vector包含LoopDetectorData *,因此std::find将比较指针是否相等,而searchFor永远不会与vector中已有的任何指针进行比较.您很可能应该使用std::vector<LoopDetectorData> Vec_loopDetectors; -
由于你刚刚创建了
searchFor,指向它的指针不可能在向量中。 -
谢谢大家。我得到了它。为什么我收到这么多负票! :)