У меня есть следующий функтор:
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();
};
Хотел бы я предложить свой гипотезу о том, что происходит, но на самом деле я понятия не имею. Заранее спасибо за любые указатели.