43 #ifdef PANZER_HAVE_EPETRA_STACK
45 #ifndef __Panzer_STK_Utilities_hpp__
46 #define __Panzer_STK_Utilities_hpp__
50 #include "Epetra_Vector.h"
51 #include "Epetra_MultiVector.h"
57 namespace panzer_stk {
78 template <
typename RAContainer,
class Compare>
79 void sorted_permutation(
const RAContainer & cont,std::vector<std::size_t> & permutation,
const Compare & comp);
87 template <
typename RAContainer>
88 void sorted_permutation(
const RAContainer & cont,std::vector<std::size_t> & permutation);
92 namespace panzer_stk {
94 template <
typename RAContainer,
typename Compare>
96 PermFunctor(
const RAContainer & cont,
const Compare & comp)
97 : compare(comp), values(cont) {}
98 PermFunctor(
const PermFunctor & p)
99 : compare(p.compare), values(p.values) {}
101 bool operator()(std::size_t a,std::size_t b)
const
102 {
return compare(values[a],values[b]); }
105 const Compare & compare;
106 const RAContainer & values;
111 template <
typename RAContainer>
112 void sorted_permutation(
const RAContainer & cont,std::vector<std::size_t> & permutation)
114 std::less<typename RAContainer::value_type> comp;
115 sorted_permutation(cont,permutation,comp);
118 template <
typename RAContainer,
class Compare>
119 void sorted_permutation(
const RAContainer & cont,std::vector<std::size_t> & permutation,
const Compare & comp)
121 PermFunctor<RAContainer,Compare> pf(cont,comp);
123 permutation.resize(cont.size());
124 for(std::size_t i=0;i<cont.size();i++)
127 std::sort(permutation.begin(),permutation.end(),pf);
134 #endif // PANZER_HAVE_EPETRA_STACK