fork(1) download
  1. #include <vector>
  2. #include <algorithm>
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. typedef unsigned int uint;
  7.  
  8. enum {ASCEND, DESCEND};
  9.  
  10. template<typename T>
  11. bool ascend_sort(pair<uint, T> i, pair<uint, T> j){return j.second>i.second;}
  12.  
  13. template<typename T>
  14. bool descend_sort(pair<uint, T> i, pair<uint, T> j){return i.second>j.second;}
  15.  
  16. template<typename T>
  17. void sortIdx(vector<uint>& idx, const vector<T>& src, int dir=ASCEND){
  18. vector< pair<uint, T> > tmp (src.size());
  19. for (uint i=0; i<src.size(); i++){
  20. tmp.push_back(pair<uint, T>(i, src[i]));
  21. cout << i << " " << src[i] << " \n";
  22. }
  23.  
  24. if (dir==ASCEND){
  25. sort(tmp.begin(), tmp.end(), ascend_sort<T>);
  26. }else{
  27. sort(tmp.begin(), tmp.end(), descend_sort<T>);
  28. }
  29.  
  30. idx.resize(src.size());
  31.  
  32. for (uint i=0; i<src.size(); i++){
  33. idx[i] = (tmp[i].first);
  34. cout << tmp[i].first << " \n" ;
  35. }
  36. }
  37.  
  38. int main(){
  39.  
  40. vector<float> src;
  41. src.push_back(3.0f);
  42. src.push_back(2.0f);
  43. src.push_back(4.0f);
  44.  
  45. vector<uint> tmp;
  46.  
  47. sortIdx(tmp, src, DESCEND);
  48. }
Success #stdin #stdout 0.02s 2860KB
stdin
Standard input is empty
stdout
0 3 
1 2 
2 4 
2 
0 
1