私は次のファンクターを持っています:
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;
}
}
};
これは厳密な弱順序であると想定されており、デバッグ目的ではこれほど長くなります(1行のみの場合もあります)。
私はこのファンクターを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();
};
何が起こっているのかについての仮説を立てることができればいいのですが、実際にはわかりません。ポインタを事前に感謝します。