構造体のコンテナをソートするときにカスタムコンパレータを使用するのを忘れたコードのバグを見つけました。これにより、構造体に何も定義しなかったため、less演算子として何を使用しているのか疑問に思いました。
これらの演算子が定義されていない場合、オブジェクトは<、>、および==をどのように比較しますか?メモリアドレスによるものですか?規格で定義されていますか?Googleでこの情報を見つけることができませんでした。
編集:
これが私が使っていたクラスです:
using namespace std;
typedef unsigned id;
class LogEntry {
id master_id;
string timestamp;
string category;
string message;
string str_rep;
public:
LogEntry(id id, string t, string c, string m) :
master_id(id), timestamp(t), category(c), message(m) {
}
string get_timestamp() const {
return timestamp;
}
string get_category() const {
return category;
}
string get_message() const {
return message;
}
string to_string() {
ostringstream ss;
ss << master_id << "|" << timestamp << "|" << category << "|"
<< message;
return ss.str();
}
id get_id() const {
return master_id;
}
};
EDIT2:
ばかげた間違いをしたことに気づきました。オブジェクトへのポインタのベクトルを格納していました。したがって、ポインタがアドレスによって比較される可能性が非常に高くなります。ポインタを格納していなかったら、コンパイルされていなかったと思います。
EDIT3:KerrekSBは、関連する彼の回答のコメントに関連する興味深いリンクを投稿しました:ポインターを完全に順序付けるにはどうすればよいですか?