パラメータと同じサイズの2つのベクトルを受け取る関数があります:
void mysort(std::vector<double>& data, std::vector<unsigned int>& index)
{
// For example :
// The data vector contains : 9.8 1.2 10.5 -4.3
// The index vector contains : 0 1 2 3
// The goal is to obtain for the data : -4.3 1.2 9.8 10.5
// The goal is to obtain for the index : 3 1 0 2
// Using std::sort and minimizing copies
}
必要なコピーの数を最小限に抑えてその問題を解決するにはどうすればよいですか?
明らかな方法は、の単一のベクトルを作成しstd::pair<double, unsigned int>
、コンパレータを指定して[](std::pair<double, unsigned int> x, std::pair<double, unsigned int> y){return x.first < y.first;}
から、結果を2つの元のベクトルにコピーすることですが、効率的ではありません。
注:関数のシグネチャは固定されており、の単一のベクトルを渡すことはできませんstd::pair
。