解决方法
首先想到的是有点hackish,但你可以定义一个存储double和它的原始索引的结构,然后重载<运算符基于double进行排序:
struct s { double d; int index; bool operator < (const struct &s) const { return d < s.d; } };
然后你可以从结构中检索原始索引.
富勒的例子:
vector<double> orig; vector<s> v; ... for (int i=0; i < orig.size(); ++i) { s s_temp; s_temp.d = orig[i]; s_temp.index = i; v.push_back(s); } sort(v.begin(),v.end()); //now just retrieve v[i].index
这将使它们从最小到最大排序,但你可以重载>运算符,然后如果需要,然后传入更大的sort函数.