我需要一种方法,我可以将输入放在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));
}
答案 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
我希望是你想要的。最后,请原谅语法错误和/或丢失垃圾,因为我只是动态地抨击它并且没有编译器来检查它。一定要喜欢网吧。