是否可以使用C ++中的sort对多维数组(逐行)进行排序,以便保存索引?
例如,
13, 14, 5, 16
0, 4, 3, 2
7, 3, 7, 6
9, 1, 11, 12
变为:
{ 5,13,14,16}
{ 0,2,3,4 }
{ 3,6,7,7}
{ 1,9,11,12 }
带索引的数组将是:
{2,0,1,3}
{0,3,2,1}
{1,3,0,2}
{ 1,0,2,3}
答案 0 :(得分:2)
首先创建整数索引数组;这里是一维数组:
int ind[arr.size()];
for( int i=0; i<arr.size(); ++i)
ind[i] = i;
然后创建比较对象。这是C ++ 99术语中的一个球场;对于C ++ 11,您可以使用lambda来快捷方式:
struct compare
{
bool operator()( int left, int right ) {
return arr[left] < arr[right];
}
};
使用该仿函数对索引数组进行排序:
std::sort( ind, ind+sizeof(arr), compare );
最后,使用排序索引数组对values数组进行排序。
答案 1 :(得分:0)
是。要逐行排序,您必须在sort
函数中设置适当的起点和终点。要保留索引部分,您可以首先使用make_pair
命令创建数组元素和索引的对。执行上面的代码后,您可以重建索引数组。
你需要做这样的事情(虽然我没试过):
for (i = 0; i < matrix.size(); i++)
{
sort(matrix[i].begin(), matrix[i].end());
}
请记住将索引添加为对中的第二个元素,因为对的默认比较运算符会检查第一个元素,然后是第二个元素。