gsi*_*011 5 c++ comparison comparison-operators
我在代码中发现了一个错误,我在排序结构容器时忘记使用自定义比较器.这让我想知道它作为小于运算符使用了什么,因为我没有为结构定义任何东西.
当没有定义那些运算符时,对象如何比较<,>和==?是内存地址吗?它是在标准中定义的吗?我在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;
}
};
Run Code Online (Sandbox Code Playgroud)
EDIT2:
我意识到我犯了一个愚蠢的错误.我正在存储指向对象的指针向量.因此,指针很可能通过地址进行比较.如果我没有存储指针,我认为它不会编译.
编辑3:KerrekSB在他的回答的评论中发布了一个相关的有趣链接:如何指针完全有序?
默认比较器是标准模板std::less<T>,仅x < y用于两个对象x和y类型T.这有多种方法可行:
T 是算术的基本类型,使用内置运算符.
T是一个类类型,并有一个成员operator<.
有一个免费的功能operator<(T const &, T const &).
您的用户定义类型具有内置类型的隐式转换函数,该类型为调用内置函数提供了唯一的路径<.
此外,还可以专门std::less为您的用户定义类型T.