class RankList {
public:
struct RankListComparator {
bool operator()(const std::pair<boost::numeric::ublas::vector<double>, double>& a, const std::pair<boost::numeric::ublas::vector<double>, double>& b) {
return a.second >= b.second;
}
};
void push_back(boost::numeric::ublas::vector<double> features, double label) {
m_list.push_back(std::pair<boost::numeric::ublas::vector<double>, double>(features, label));
}
void sort() {
std::sort(m_list.begin(), m_list.end(), RankListComparator());
}
protected:
std::vector<std::pair<boost::numeric::ublas::vector<double>, double> > m_list;
};
上面的sort()有什么问题?我得到了:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
当我调用sort()时。 gdb没有给我任何有用的东西......
我认为这个问题与我在课堂上的原因有什么关系?
编辑:解决了
问题在于这一行
return a.second >= b.second;
更改为
return a.second > b.second;
答案 0 :(得分:6)
您提供给std::sort
的比较器必须建立strict weak ordering。这意味着:
原始比较器不反射:compare(x, x)
为真。使用这样的比较器会导致未定义的行为,您亲身体验过std::bad_alloc
。