gpt4 book ai didi

c++ - std::sort 得到一个 std::bad_alloc

转载 作者:行者123 更新时间:2023-11-30 00:57:01 25 4
gpt4 key购买 nike

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;

最佳答案

你给 std::sort 的比较器必须建立一个 strict weak ordering .这意味着:

  • 对于所有的x,compare(x, x)(非自反性)不是这种情况。
  • 对于所有 x ≠ y,如果 compare(x, y) 则不是 compare(y, x)(非对称)。
  • 对于所有 x、y 和 z,如果比较 (x, y) 和比较 (y, z),则比较 (x, z)(传递性)。
  • 对于所有的x、y、z,如果x与y不可比,y与z不可比,则x与z不可比(等价的传递性)。

您原来的比较器不是反身的:compare(x, x) 为真。使用这样的比较器会导致未定义的行为,您亲 body 验过 std::bad_alloc

关于c++ - std::sort 得到一个 std::bad_alloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9170080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com