我有以下函子:STL字符串比較函子
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是一個列表,並且類請求是這樣的:
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();
};
我希望我能提供我的假設,以瞭解發生了什麼,但我其實不知道。提前感謝任何指針。
如果它看起來每次都比較相同的文件名,那麼它不會在第一個之後插入任何新成員,因爲對於集合來說,每個新文件都不會比較爲「小於」 '不大於'已經在集合中的一個文件。你從哪裏得到你傳入addFile方法的文件指針? – 2009-06-16 12:14:19
調用addFile的代碼是什麼? – Patrick 2009-06-16 12:15:44