我有以下仿函数:
class ComparatorClass {
public:
bool operator () (SimulatedDiskFile * file_1, SimulatedDiskFile * file_2) {
string file_1_name = file_1->getFileName();
string file_2_name = file_2->getFileName();
cout << file_1_name << " and " << file_2_name << ": ";
if (file_1_name < file_2_name) {
cout << "true" << endl;
return true;
}
else {
cout << "false" << endl;
return false;
}
}
};
它应该是一个严格的弱排序,并且它这么长(可能只有一行)用于调试目的。
我使用这个函子作为 stl::set 的比较函子。问题是,它只插入第一个元素。通过将控制台输出添加到比较器函数中,我了解到它实际上每次都在将文件名与自身进行比较。
其他相关线路是:
typedef set<SimulatedDiskFile *, ComparatorClass> FileSet;
和
// (FileSet files_;) <- SimulatedDisk private class member
void SimulatedDisk::addFile(SimulatedDiskFile * file) {
files_.insert(file);
positions_calculated_ = false;
}
编辑:调用 .addFile() 的代码是:
current_request = all_requests.begin();
while (current_request != all_requests.end()) {
SimulatedDiskFile temp_file(current_request->getFileName(), current_request->getResponseSize());
disk.addFile(&temp_file);
current_request++;
}
其中 all_requests 是一个列表,而类 Request 是这样的:
class Request {
private:
string file_name_;
int response_code_;
int response_size_;
public:
void setFileName(string file_name);
string getFileName();
void setResponseCode(int response_code);
int getResponseCode();
void setResponseSize(int response_size);
int getResponseSize();
};
我希望我能就发生的事情提供我的假设,但我实际上不知道。在此先感谢您的任何指点。