always use stable sort for sorting indices

This commit is contained in:
conrad
2025-05-29 20:01:54 +10:00
parent 91319547c4
commit 7e7fff181b
3 changed files with 9 additions and 23 deletions
@@ -26,7 +26,7 @@ class op_sort_index
{
public:
template<bool use_stable_sort, typename T1>
template<typename T1>
static inline bool apply_helper(Mat<uword>& out, const Proxy<T1>& P, const uword sort_mode);
template<typename T1>
+5 -19
View File
@@ -21,7 +21,7 @@
template<bool use_stable_sort, typename T1>
template<typename T1>
inline
bool
op_sort_index::apply_helper(Mat<uword>& out, const Proxy<T1>& P, const uword sort_mode)
@@ -76,27 +76,13 @@ op_sort_index::apply_helper(Mat<uword>& out, const Proxy<T1>& P, const uword sor
{
arma_sort_index_mangle_ascend_comparator<eT> comparator;
if(use_stable_sort)
{
std::stable_sort( packet_vec.begin(), packet_vec.end(), comparator );
}
else
{
std::sort( packet_vec.begin(), packet_vec.end(), comparator );
}
std::stable_sort( packet_vec.begin(), packet_vec.end(), comparator );
}
else
{
arma_sort_index_mangle_descend_comparator<eT> comparator;
if(use_stable_sort)
{
std::stable_sort( packet_vec.begin(), packet_vec.end(), comparator );
}
else
{
std::sort( packet_vec.begin(), packet_vec.end(), comparator );
}
std::stable_sort( packet_vec.begin(), packet_vec.end(), comparator );
}
uword* out_mem = out.memptr();
@@ -130,13 +116,13 @@ op_sort_index::apply(Mat<uword>& out, const mtOp<uword,T1,op_sort_index>& in)
{
Mat<uword> tmp;
all_non_nan = op_sort_index::apply_helper<true>(tmp, P, sort_mode);
all_non_nan = op_sort_index::apply_helper(tmp, P, sort_mode);
out.steal_mem(tmp);
}
else
{
all_non_nan = op_sort_index::apply_helper<true>(out, P, sort_mode);
all_non_nan = op_sort_index::apply_helper(out, P, sort_mode);
}
if(all_non_nan == false) { out.soft_reset(); }
+3 -3
View File
@@ -88,7 +88,7 @@ op_sort::apply_noalias(Mat<eT>& out, const Mat<eT>& X, const uword sort_mode, co
const Proxy< Col<eT> > P(X_col);
const bool all_non_nan = op_sort_index::apply_helper<false>(indices, P, sort_mode);
const bool all_non_nan = op_sort_index::apply_helper(indices, P, sort_mode);
if(all_non_nan == false)
{
@@ -128,7 +128,7 @@ op_sort::apply_noalias(Mat<eT>& out, const Mat<eT>& X, const uword sort_mode, co
const Proxy< Col<eT> > P(Y_col);
const bool all_non_nan = op_sort_index::apply_helper<false>(indices, P, sort_mode);
const bool all_non_nan = op_sort_index::apply_helper(indices, P, sort_mode);
if(all_non_nan == false)
{
@@ -260,7 +260,7 @@ op_sort_vec::apply(Mat<typename T1::elem_type>& out, const Op<T1,op_sort_vec>& i
const Proxy< Mat<eT> > P(X);
const bool all_non_nan = op_sort_index::apply_helper<false>(indices, P, sort_mode);
const bool all_non_nan = op_sort_index::apply_helper(indices, P, sort_mode);
if(all_non_nan == false)
{