Skip to content

Commit 1ef6192

Browse files
authored
Merge pull request #2499 from tdegeus/argmin
Simplifying `argmin` and `argmax` where possible
2 parents b2e23d0 + f040c62 commit 1ef6192

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

include/xtensor/xsort.hpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -769,7 +769,7 @@ namespace xt
769769
};
770770

771771
template <class IT, class F>
772-
inline std::size_t cmp_idx(IT iter, IT end, std::ptrdiff_t inc, F&& cmp)
772+
inline xtensor<std::size_t, 0> cmp_idx(IT iter, IT end, std::ptrdiff_t inc, F&& cmp)
773773
{
774774
std::size_t idx = 0;
775775
auto min = *iter;
@@ -782,7 +782,7 @@ namespace xt
782782
idx = i;
783783
}
784784
}
785-
return idx;
785+
return xtensor<std::size_t, 0>{idx};
786786
}
787787

788788
template <layout_type L, class E, class F>
@@ -857,7 +857,10 @@ namespace xt
857857
{
858858
using value_type = typename E::value_type;
859859
auto&& ed = eval(e.derived_cast());
860-
return detail::arg_func_impl<L>(ed, std::less<value_type>());
860+
auto begin = ed.template begin<L>();
861+
auto end = ed.template end<L>();
862+
std::size_t i = std::distance(begin, std::min_element(begin, end));
863+
return xtensor<size_t, 0>{i};
861864
}
862865

863866
/**
@@ -884,7 +887,10 @@ namespace xt
884887
{
885888
using value_type = typename E::value_type;
886889
auto&& ed = eval(e.derived_cast());
887-
return detail::arg_func_impl<L>(ed, std::greater<value_type>());
890+
auto begin = ed.template begin<L>();
891+
auto end = ed.template end<L>();
892+
std::size_t i = std::distance(begin, std::max_element(begin, end));
893+
return xtensor<size_t, 0>{i};
888894
}
889895

890896
/**

0 commit comments

Comments
 (0)