非常に簡単な質問があります。私は単に愚かなことをしていると思いますが、何時間もバグを見つけることができません。
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
typedef unsigned int uint;
enum {ASCEND, DESCEND};
template<typename T>
bool ascend_sort(pair<uint, T> i, pair<uint, T> j){return j.second>i.second;}
template<typename T>
bool descend_sort(pair<uint, T> i, pair<uint, T> j){return i.second>j.second;}
template<typename T>
void sortIdx(vector<uint>& idx, const vector<T>& src, int dir=ASCEND){
vector< pair<uint, T> > tmp (src.size());
for (uint i=0; i<src.size(); i++){
tmp.push_back(pair<uint, T>(i, src[i]));
cout << i << " " << src[i] << " \n";
}
if (dir==ASCEND){
sort(tmp.begin(), tmp.end(), ascend_sort<T>);
}else{
sort(tmp.begin(), tmp.end(), descend_sort<T>);
}
idx.resize(src.size());
for (uint i=0; i<src.size(); i++){
idx[i] = (tmp[i].first);
cout << tmp[i].first << " \n" ;
}
}
http://ideone.com/HOnvIが機能し、 http: //ideone.com/R6H0nが機能しないのはなぜですか。
コードは、昇順と降順の並べ替えのみが異なります。マップなしでの並べ替え(ベクトルを直接並べ替える)もテストしましたが、そこでは正常に機能します。