我填写了一个2dim向量,如下所示:
vector< vector<double>> save;
for ( int i=0;i<5;i++ )
{
for ( int j=0;j<5;j++ )
{
save[i][j]=i*(i+j);
}
}
现在我该如何排序并保留相关指数? 例如,8的索引是4和4
我已经使用这段代码来保存索引并将它们分别放在另外两个数组中,分别是2dim和1dim
void sort(int index[5][2],int order[5])
{
int l=0;
while( l<5)
{
float max=-10000;
int c1=0;
int c2=0;
for(int i=0;i<5;i++)
{
for(int j=i+1;j<5;j++)
{
if(save[i][j]>max)
{
max=save[i][j];
c1=i+1;
c2=j+1;
}
}
}
order[l]=max;
index[l][0]=c1;
index[l][1]=c2;
l++;
}
}
我想知道如果我使用向量和排序函数而不是当前解决方案,当数据的数量是100而不是5时,我可以节省更多的时间吗?
答案 0 :(得分:1)
您可以使用数字哈希映射到其索引。类似的东西:
std::map< double, std::list<int> > indices;
另外,请考虑两个浮点数之间的比较是近似的事实。
答案 1 :(得分:1)
我会做这样的事情。
// Create a structure to manage co-ordinates, values, and 1d-indices.
// These are the components you're actually interested in.
struct PointValue
{
PointValue(int x, int y, int value)
: x(x), y(t), value(value), indexOneDimensional(x*(x+y))
{}
int x, y, indexOneDimensional;
int value;
// Sort predicate for sorting these PointValue objects.
static bool SortFunction(const PointValue& left, const PointValue& right)
{
return left.value < right.value;
}
};
typedef std::vector<PointValue> PointValueList;
int sizeX = 100; int sizeY = 100;
PointValueList myValues(sizeX * sizeY);
// Create a 100x100 array with random values for each point.
for (int i = 0; i < sizeX; i++)
{
for (int j = 0; j < sizeY; j++)
{
myValues.push_back(PointValue(i, j, rand()));
}
}
// Sort using our static predicate.
std::sort(myValues.begin(), myValues.end(), PointValue::SortFunction);
// Print 1d-indices.
std::for_each(m_values.begin(), m_values.end(), [](const PointValue& val) {
printf("Index is: %d. Value is: %d", val.indexOneDimensional, val.value);
});