C++ Boost块间接排序分段错误
代码如下:C++ Boost块间接排序分段错误,c++,sorting,c++11,boost,parallel-processing,C++,Sorting,C++11,Boost,Parallel Processing,代码如下: template<int N> void para_sort(std::vector<bfs_node<N>>& res) { #pragma omp parallel { boost::sort::block_indirect_sort(res.begin(), res.end(), compare_node<N>); } } 其中id字段表示无序集类型数据结构。 例如:id表示集合{
template<int N>
void para_sort(std::vector<bfs_node<N>>& res) {
#pragma omp parallel
{
boost::sort::block_indirect_sort(res.begin(), res.end(), compare_node<N>);
}
}
其中id
字段表示无序集
类型数据结构。
例如:id
表示集合{1,2,3}
而_set(id,1)中的将返回true
,否则false
提出的例外情况:
大小为16的读取无效
==2125==at 0x46C59F:void boost::sort::pdqsort_detail::pdqsort_loop(uu gnu cxx::u normal_迭代器,u gnu cxx::u normal_迭代器,std::less,int,bool)
是否使用附加参数将线程数设置为block\u indirective\u sort
?如果需要,您需要OMP指令吗?我尝试过,但没有效果#pragma omp parallel
因此应该公开要使用的所有线程。是否使用附加参数将线程数设置为block_indirect_sort
?如果需要,您需要OMP指令吗?我尝试过,但没有效果<代码>#pragma omp parallel
因此应该公开要使用的所有线程。
template<int N>
bool compare_node(const bfs_node<N>& lhs, const bfs_node<N>& rhs) {
if (lhs.id == rhs.id) return false;
for (int i = 0; i < N * 64; ++i) {
bool lflag = in_set(lhs.id, i);
bool rflag = in_set(rhs.id, i);
if (lflag == rflag ) { continue; }
if (lflag) return true;
return false;
}
return false;
} //