【发布时间】:2011-11-04 07:44:35
【问题描述】:
我希望能得到一些帮助,想出一种更快的方法来对值进行排序,同时保留原始订单的键。我宁愿避免使用 boost,它不需要是稳定的排序。这是我想出的代码,它可以工作,但速度慢且效率低。排序完成后我不需要保留地图。
struct column_record
{
int index;
float value;
};
// sort each column on value while retaining index
column_record *preprocess_matrix(float *value, int m, int n)
{
std::multimap<float,int> column_map;
column_record *matrix = new column_record[m*n];
for (int i=0; i<n; i++)
{
for (int j=0; j<m; j++)
{
column_map.insert(std::pair<float,int>(value[m*i+j],j));
}
int j = 0;
for (std::multimap<float,int>::iterator it=column_map.begin(); it!=column_map.end(); it++)
{
matrix[m*i+j].index = (*it).second;
matrix[m*i+j].value = (*it).first;
j++;
}
column_map.clear();
}
return matrix;
}
【问题讨论】:
-
也许我眼睛不好,但我没有看到
matrix在分配后被设置,也没有看到column的声明位置可能它们的意思相同,你把它们弄混了?跨度>