【发布时间】:2021-05-16 04:00:20
【问题描述】:
我编写了以下函数,用于对数组向量进行部分稳定排序。当向量的大小像 1G 一样小时它总是可以工作,当向量的大小很大(5 或 6 Gig)时它有时会工作,有时它会抛出分段错误,有人可以帮我弄清楚这个问题。
template <typename T, size_t SIZE>
void sort(std::vector<std::array<T, SIZE>>& vec, size_t depth = SIZE) {
std::sort(vec.begin(), vec.end(),
[&](const auto& t1, const auto& t2)->bool {
for(size_t s = 0; s < depth; s++) {
if(t1[s] == t2[s]) {
continue;
}
return t1[s] < t2[s];
}
return true;
});
}
我使用 g++ 10.2,这些是开关,我用 -DNDEBUG -march=native -msse3 -ftree-vectorize -O3 编译代码。
【问题讨论】:
-
您的比较函数在
t1==t2时返回true,它可能不应该那样做。 -