【发布时间】:2013-05-06 00:46:59
【问题描述】:
起初我是新来的,英语不是我的母语,所以对任何语法错误表示歉意,但我发现这个社区真的很好,所以我会尽量准确地提出我的问题。
我想将我自己的类对象添加到一个 stl 容器 multiset 中,并想用我自己在我的类中定义的重载的 less 运算符对其进行排序。我真的尝试了几种解决方案,但都没有真正奏效,所以我希望有人能给我一些有用的提示来解决它。
这是我对类定义的总体思路:
class object {
public:
int first;
string second;
object(int f, string s) {
first = f;
second = s;
}
bool operator<(const object &comp) {
return first < comp.first;
}
};
这是我的第一次尝试,但没有成功,所以我也尝试将重载的运算符声明为友元方法,但也没有用。
这是我的主要功能的简短代码摘录:
includes ...
//code omitted
int main() {
multiset<object*> mmset;
mmset.insert(new object(10, "test"));
mmset.insert(new object(11, "test"));
return 0;
}
过了一会儿,我开始调试我的代码并试图找出问题所在,我遇到了以下让我有点怀疑的事情。
从 stl 中提取代码:
// TEMPLATE STRUCT less
template<class _Ty>
struct less : public binary_function<_Ty, _Ty, bool>
{ // functor for operator<
bool operator()(const _Ty& _Left, const _Ty& _Right) const
{ // apply operator< to operands
return (_Left < _Right);
}
};
我在这一行设置了一个断点,并观察了程序在这里做了什么,我不知道为什么,但它只比较两个对象的地址并返回所以总是假的。尽管运算符存在并且 _Left 和 _Right 变量包含我的对象的地址,但它从不调用我重载的 less 运算符。
如果有人可以帮助我,我将不胜感激。
最好的问候
汤姆
【问题讨论】:
-
关于您的第一次尝试,您所说的“它没有用”是什么意思?没有编译?运行时崩溃?没有给出预期的结果?错误信息是什么?
-
是的,当然这有点含糊。我的意思是它没有给出预期的结果。程序本身运行没有任何错误,只是它没有排序。
标签: c++ stl operator-overloading containers multiset