2010-04-28 83 views
3

我试图在C++中的自定义结构C++结构排序错误

struct Book{ 
public:int H,W,V,i; 
}; 

的矢量用一个简单的仿

class CompareHeight 
{ 
public: 
    int operator() (Book lhs,Book rhs) 
    { 
     return lhs.H-rhs.H; 
    } 
}; 

排序尝试时:

vector<Book> books(X); 
..... 
sort(books.begin(),books.end(), CompareHeight()); 

它给了我例外“无效运营商<”

这个错误是什么意思?

感谢

+0

顺便说一句你的工具链(编译器/库)是什么?我很好奇哪些确认了这种错误。 – jpalecek 2010-04-28 08:49:12

+0

我使用VS 2008 .. 我认为认识到这个异常意味着它在运行时做了更多的工作,所以它的效率低于运行时间..我是对吗? – Betamoo 2010-04-28 09:19:25

+0

@jpalecek:Dinkumware在他们的图书馆中对这类东西进行了一些理智检查。 – sbi 2010-04-28 12:22:49

回答

11

sort预计返回bool的功能,这是真的当且仅当LHS之前的RHS:

bool operator() (const Book& lhs, const Book& rhs) 
{ 
    return lhs.H < rhs.H; 
} 

还要注意改变const Book&参数,以避免复制。