采用2D输入并同时对其进行排序的最快方法

时间:2012-07-22 07:52:26

标签: c++ sorting

我需要一种方法,我可以将输入放在2d数组中,并以最快的方式排序。我尝试使用Insertion Sort同时输入和排序。我使用的第二件事是我单独为一行multimap插入并插入键值作为我想要的值,并且映射值与该键相关,作为一些Dummy值。由于map对键进行排序,而Inserting It可能是我想到的一种方式。

以下代码用于确保我的2D中的1行已将其元素排序 多重映射。基本上你可以说我根本不想使用2D结构 将逐个单独使用这些行,因此可以视为一维数组。 我也希望他们在阅读输入时重新排列,所以我不必这样做 做这些额外的操作。

for(long int j=1;j<=number_in_group;j++)
{
   cin >> arrival_time;
   arrival_map.insert(pair<long int, long int>(arrival_time,1));
}

1 个答案:

答案 0 :(得分:1)

试试STL std::priority_queue?保证输出被排序,如果您将输入极化为2-D对象(例如包含行号),那么您的队列将完全构建。此时只需将数字从队列中以'n'的形式从队列中剔除,其中'n'是您的行大小,并且每个都将正确排序。您将需要一个元素类型,它对优先级队列中的值和行进行编码,并排序偏向第一行,然后是值。您的示例使用long int作为值的数据类型。假设您的行不大于系统unsigned int的大小:

class Element
{
public:
   Element(unsigned int row, long int val)
      : myrow(row), myval(val)
   {};

   bool operator <(const Element& elem)
   {
      return (myrow < elem.myrow || 
             (myrow == elem.myrow && myval < elem.myvel);
   }

   unsigned int myrow;
   long int myval;
};


typedef std::priority_queue<Element> MyQueue;

注意:这利用优先级队列的默认比较运算符调用std::less<>,它只是使用项目定义的operator <()比较项目。完成后,只需将矩阵推入队列,在切换到下一行时递增行索引。

MyQueue mq;

mq.push_back(Element(1,100));
mq.push_back(Element(1,99));
mq.push_back(Element(2,100));
mq.push_back(Element(2,101));

完成后弹出队列将产生以下顺序: 99 100 100 101

我希望是你想要的。最后,请原谅语法错误和/或丢失垃圾,因为我只是动态地抨击它并且没有编译器来检查它。一定要喜欢网吧。