inline ivec sort_index(const vec&a){ ivec ret(a.size()); std::vector<std::pair<double,int> > D; // D.reserve(a.size()); for (int i=0;i<a.size();i++) D.push_back(std::make_pair<double,int>(a.coeff(i),i)); std::sort(D.begin(),D.end()); for (int i=0;i<a.size();i++) { ret[i]=D[i].second; } return ret; }