48    BasicSort( 
const std::string &which = 
"LM" );
 
   79    void sort(std::vector<MagnitudeType> &evals, Teuchos::RCP<std::vector<int> > perm = Teuchos::null, 
int n = -1) 
const;
 
   99    void sort(std::vector<MagnitudeType> &r_evals,
 
  100              std::vector<MagnitudeType> &i_evals,
 
  101              Teuchos::RCP<std::vector<int> > perm = Teuchos::null,
 
  115    template <
class LTorGT>
 
  118      bool operator()(MagnitudeType, MagnitudeType);
 
  120      template <
class First, 
class Second>
 
  121        bool operator()(std::pair<First,Second>, std::pair<First,Second>);
 
  124    template <
class LTorGT>
 
  127      bool operator()(std::pair<MagnitudeType,MagnitudeType>, std::pair<MagnitudeType,MagnitudeType>);
 
  129      template <
class First, 
class Second>
 
  130        bool operator()(std::pair<First,Second>, std::pair<First,Second>);
 
  133    template <
class LTorGT>
 
  136      bool operator()(MagnitudeType, MagnitudeType);
 
  137      template <
class First, 
class Second>
 
  138        bool operator()(std::pair<First,Second>, std::pair<First,Second>);
 
  141    template <
typename pair_type>
 
  144      const typename pair_type::first_type &operator()(
const pair_type &v) 
const;
 
  147    template <
typename pair_type>
 
  150      const typename pair_type::second_type &operator()(
const pair_type &v) 
const;
 
 
  209    TEUCHOS_TEST_FOR_EXCEPTION(n < -1, std::invalid_argument, 
"Anasazi::BasicSort::sort(r): n must be n >= 0 or n == -1.");
 
  213    TEUCHOS_TEST_FOR_EXCEPTION(evals.size() < (
unsigned int) n,
 
  214                       std::invalid_argument, 
"Anasazi::BasicSort::sort(r): eigenvalue vector size isn't consistent with n.");
 
  215    if (perm != Teuchos::null) {
 
  216      TEUCHOS_TEST_FOR_EXCEPTION(perm->size() < (
unsigned int) n,
 
  217                         std::invalid_argument, 
"Anasazi::BasicSort::sort(r): permutation vector size isn't consistent with n.");
 
  220    typedef std::greater<MagnitudeType> greater_mt;
 
  221    typedef std::less<MagnitudeType>    less_mt;
 
  223    if (perm == Teuchos::null) {
 
  228        std::sort(evals.begin(),evals.begin()+n,compMag<greater_mt>());
 
  230      else if (which_ == SM) {
 
  231        std::sort(evals.begin(),evals.begin()+n,compMag<less_mt>());
 
  233      else if (which_ == LR) {
 
  234        std::sort(evals.begin(),evals.begin()+n,compAlg<greater_mt>());
 
  236      else if (which_ == SR) {
 
  237        std::sort(evals.begin(),evals.begin()+n,compAlg<less_mt>());
 
  240        TEUCHOS_TEST_FOR_EXCEPTION(
true, 
SortManagerError, 
"Anasazi::BasicSort::sort(r): LI or SI sorting invalid for real scalar types." );
 
  253      std::vector< std::pair<MagnitudeType,int> > pairs(n);
 
  254      for (
int i=0; i<n; i++) {
 
  255        pairs[i] = std::make_pair(evals[i],i);
 
  260        std::sort(pairs.begin(),pairs.begin()+n,compMag<greater_mt>());
 
  262      else if (which_ == SM) {
 
  263        std::sort(pairs.begin(),pairs.begin()+n,compMag<less_mt>());
 
  265      else if (which_ == LR) {
 
  266        std::sort(pairs.begin(),pairs.begin()+n,compAlg<greater_mt>());
 
  268      else if (which_ == SR) {
 
  269        std::sort(pairs.begin(),pairs.begin()+n,compAlg<less_mt>());
 
  272        TEUCHOS_TEST_FOR_EXCEPTION(
true, 
SortManagerError, 
"Anasazi::BasicSort::sort(r): LI or SI sorting invalid for real scalar types." );
 
  276      std::transform(pairs.begin(),pairs.end(),evals.begin(),sel1st< std::pair<MagnitudeType,int> >());
 
  277      std::transform(pairs.begin(),pairs.end(),perm->begin(),sel2nd< std::pair<MagnitudeType,int> >());
 
 
  292                                      std::vector<MagnitudeType> &i_evals,
 
  293                                      Teuchos::RCP< std::vector<int> > perm,
 
  300    TEUCHOS_TEST_FOR_EXCEPTION(n < -1, std::invalid_argument, 
"Anasazi::BasicSort::sort(r,i): n must be n >= 0 or n == -1.");
 
  302      n = r_evals.size() < i_evals.size() ? r_evals.size() : i_evals.size();
 
  304    TEUCHOS_TEST_FOR_EXCEPTION(r_evals.size() < (
unsigned int) n || i_evals.size() < (
unsigned int) n,
 
  305                       std::invalid_argument, 
"Anasazi::BasicSort::sort(r,i): eigenvalue vector size isn't consistent with n.");
 
  306    if (perm != Teuchos::null) {
 
  307      TEUCHOS_TEST_FOR_EXCEPTION(perm->size() < (
unsigned int) n,
 
  308                         std::invalid_argument, 
"Anasazi::BasicSort::sort(r,i): permutation vector size isn't consistent with n.");
 
  311    typedef std::greater<MagnitudeType> greater_mt;
 
  312    typedef std::less<MagnitudeType>    less_mt;
 
  317    if (perm == Teuchos::null) {
 
  321      std::vector< std::pair<MagnitudeType,MagnitudeType> > pairs(n);
 
  325      if (which_ == LR || which_ == SR || which_ == LM || which_ == SM) {
 
  327          r_evals.begin(), r_evals.begin()+n,
 
  328          i_evals.begin(), pairs.begin(),
 
  329          MakePairOp<MagnitudeType,MagnitudeType>());
 
  333          i_evals.begin(), i_evals.begin()+n,
 
  334          r_evals.begin(), pairs.begin(),
 
  335          MakePairOp<MagnitudeType,MagnitudeType>());
 
  338      if (which_ == LR || which_ == LI) {
 
  339        std::sort(pairs.begin(),pairs.end(),compAlg<greater_mt>());
 
  341      else if (which_ == SR || which_ == SI) {
 
  342        std::sort(pairs.begin(),pairs.end(),compAlg<less_mt>());
 
  344      else if (which_ == LM) {
 
  345        std::sort(pairs.begin(),pairs.end(),compMag2<greater_mt>());
 
  348        std::sort(pairs.begin(),pairs.end(),compMag2<less_mt>());
 
  354      if (which_ == LR || which_ == SR || which_ == LM || which_ == SM) {
 
  355        std::transform(pairs.begin(),pairs.end(),r_evals.begin(),sel1st< std::pair<MagnitudeType,MagnitudeType> >());
 
  356        std::transform(pairs.begin(),pairs.end(),i_evals.begin(),sel2nd< std::pair<MagnitudeType,MagnitudeType> >());
 
  359        std::transform(pairs.begin(),pairs.end(),r_evals.begin(),sel2nd< std::pair<MagnitudeType,MagnitudeType> >());
 
  360        std::transform(pairs.begin(),pairs.end(),i_evals.begin(),sel1st< std::pair<MagnitudeType,MagnitudeType> >());
 
  367      std::vector< std::pair< std::pair<MagnitudeType,MagnitudeType>, 
int > > pairs(n);
 
  371      if (which_ == LR || which_ == SR || which_ == LM || which_ == SM) {
 
  372        for (
int i=0; i<n; i++) {
 
  373          pairs[i] = std::make_pair(std::make_pair(r_evals[i],i_evals[i]),i);
 
  377        for (
int i=0; i<n; i++) {
 
  378          pairs[i] = std::make_pair(std::make_pair(i_evals[i],r_evals[i]),i);
 
  382      if (which_ == LR || which_ == LI) {
 
  383        std::sort(pairs.begin(),pairs.end(),compAlg<greater_mt>());
 
  385      else if (which_ == SR || which_ == SI) {
 
  386        std::sort(pairs.begin(),pairs.end(),compAlg<less_mt>());
 
  388      else if (which_ == LM) {
 
  389        std::sort(pairs.begin(),pairs.end(),compMag2<greater_mt>());
 
  392        std::sort(pairs.begin(),pairs.end(),compMag2<less_mt>());
 
  398      if (which_ == LR || which_ == SR || which_ == LM || which_ == SM) {
 
  399        for (
int i=0; i<n; i++) {
 
  400          r_evals[i] = pairs[i].first.first;
 
  401          i_evals[i] = pairs[i].first.second;
 
  402          (*perm)[i] = pairs[i].second;
 
  406        for (
int i=0; i<n; i++) {
 
  407          i_evals[i] = pairs[i].first.first;
 
  408          r_evals[i] = pairs[i].first.second;
 
  409          (*perm)[i] = pairs[i].second;