@@ -480,14 +480,6 @@ namespace xt
480
480
}
481
481
);
482
482
}
483
-
484
- template <class C >
485
- inline auto sorted (C&& container)
486
- {
487
- auto container_copy = std::forward<C>(container);
488
- std::sort (container_copy.begin (), container_copy.end ());
489
- return std::move (container_copy);
490
- }
491
483
}
492
484
493
485
/* *
@@ -522,16 +514,16 @@ namespace xt
522
514
class C ,
523
515
class R = detail::flatten_sort_result_type_t <E>,
524
516
class = std::enable_if_t <!xtl::is_integral<C>::value, int >>
525
- inline R partition (const xexpression<E>& e, C&& kth_container, placeholders::xtuph /* ax*/ )
517
+ inline R partition (const xexpression<E>& e, C kth_container, placeholders::xtuph /* ax*/ )
526
518
{
527
519
const auto & de = e.derived_cast ();
528
520
529
521
R ev = R::from_shape ({de.size ()});
530
- auto kth_sorted = detail::sorted ( std::forward<C> (kth_container));
522
+ std::sort (kth_container. begin (), kth_container. end ( ));
531
523
532
524
std::copy (de.linear_cbegin (), de.linear_cend (), ev.linear_begin ()); // flatten
533
525
534
- detail::partition_iter (ev.linear_begin (), ev.linear_end (), kth_sorted .rbegin (), kth_sorted .rend ());
526
+ detail::partition_iter (ev.linear_begin (), ev.linear_end (), kth_container .rbegin (), kth_container .rend ());
535
527
536
528
return ev;
537
529
}
@@ -553,18 +545,18 @@ namespace xt
553
545
}
554
546
555
547
template <class E , class C , class = std::enable_if_t <!xtl::is_integral<C>::value, int >>
556
- inline auto partition (const xexpression<E>& e, C&& kth_container, std::ptrdiff_t axis = -1 )
548
+ inline auto partition (const xexpression<E>& e, C kth_container, std::ptrdiff_t axis = -1 )
557
549
{
558
550
using eval_type = typename detail::sort_eval_type<E>::type;
559
551
560
- auto kth_sorted = detail::sorted ( std::forward<C> (kth_container));
552
+ std::sort (kth_container. begin (), kth_container. end ( ));
561
553
562
554
return detail::map_axis<eval_type>(
563
555
e.derived_cast (),
564
556
axis,
565
- [&kth_sorted ](auto begin, auto end)
557
+ [&kth_container ](auto begin, auto end)
566
558
{
567
- detail::partition_iter (begin, end, kth_sorted .rbegin (), kth_sorted .rend ());
559
+ detail::partition_iter (begin, end, kth_container .rbegin (), kth_container .rend ());
568
560
}
569
561
);
570
562
}
@@ -617,7 +609,7 @@ namespace xt
617
609
class C ,
618
610
class R = typename detail::linear_argsort_result_type<typename detail::sort_eval_type<E>::type>::type,
619
611
class = std::enable_if_t <!xtl::is_integral<C>::value, int >>
620
- inline R argpartition (const xexpression<E>& e, C&& kth_container, placeholders::xtuph)
612
+ inline R argpartition (const xexpression<E>& e, C kth_container, placeholders::xtuph)
621
613
{
622
614
using eval_type = typename detail::sort_eval_type<E>::type;
623
615
using result_type = typename detail::linear_argsort_result_type<eval_type>::type;
@@ -626,15 +618,15 @@ namespace xt
626
618
627
619
result_type res = result_type::from_shape ({de.size ()});
628
620
629
- auto kth_sorted = detail::sorted ( std::forward<C> (kth_container));
621
+ std::sort (kth_container. begin (), kth_container. end ( ));
630
622
631
623
std::iota (res.linear_begin (), res.linear_end (), 0 );
632
624
633
625
detail::partition_iter (
634
626
res.linear_begin (),
635
627
res.linear_end (),
636
- kth_sorted .rbegin (),
637
- kth_sorted .rend (),
628
+ kth_container .rbegin (),
629
+ kth_container .rend (),
638
630
[&de](std::size_t a, std::size_t b)
639
631
{
640
632
return de[a] < de[b];
@@ -661,7 +653,7 @@ namespace xt
661
653
}
662
654
663
655
template <class E , class C , class = std::enable_if_t <!xtl::is_integral<C>::value, int >>
664
- inline auto argpartition (const xexpression<E>& e, C&& kth_container, std::ptrdiff_t axis = -1 )
656
+ inline auto argpartition (const xexpression<E>& e, C kth_container, std::ptrdiff_t axis = -1 )
665
657
{
666
658
using eval_type = typename detail::sort_eval_type<E>::type;
667
659
using result_type = typename detail::argsort_result_type<eval_type>::type;
@@ -673,16 +665,16 @@ namespace xt
673
665
return argpartition<E, C, result_type>(e, std::forward<C>(kth_container), xnone ());
674
666
}
675
667
676
- auto kth_sorted = detail::sorted ( std::forward<C> (kth_container));
668
+ std::sort (kth_container. begin (), kth_container. end ( ));
677
669
const auto argpartition_w_kth =
678
- [&kth_sorted ](auto res_begin, auto res_end, auto ev_begin, auto /* ev_end*/ )
670
+ [&kth_container ](auto res_begin, auto res_end, auto ev_begin, auto /* ev_end*/ )
679
671
{
680
672
std::iota (res_begin, res_end, 0 );
681
673
detail::partition_iter (
682
674
res_begin,
683
675
res_end,
684
- kth_sorted .rbegin (),
685
- kth_sorted .rend (),
676
+ kth_container .rbegin (),
677
+ kth_container .rend (),
686
678
[&ev_begin](auto const & i, auto const & j)
687
679
{
688
680
return *(ev_begin + i) < *(ev_begin + j);
0 commit comments