【发布时间】:2014-01-22 18:38:40
【问题描述】:
我有一个如下所示的二维数组。 (array[5][2])
20 11
10 20
39 14
29 15
22 23
排序后应该如下所示。
10 20
20 11
22 23
29 15
39 14
这意味着应该仅比较第一列的值对数组进行排序。
在 Java 中有一个内置的函数功能可以做到这一点。如下所示。
Arrays.sort(a, new Comparator<Long[]>() {
@Override
public int compare(Long[] o1, Long[] o2) {
Long t1 = o1[1];
Long p1 = o1[0];
Long t2 = o2[1];
Long p2 = o2[0];
if (t1 == t2) {
return (p1 > p2 ? 1 : (p1 == p2 ? 0 : -1));
} else {
return (t1 < t2 ? -1 : 1);
}
}
});
那么是否有任何 C++ 内置函数功能可以做这些事情,或者我如何在 C++ 中做到这一点(最快的实现)?
提前谢谢:)
【问题讨论】:
-
你是如何声明数组[5][2]的。它们只是 int 还是您使用了像 std::vector、std::array 等 STL 容器?
-
听起来很奇怪,
std::qsort()在按单列排序时可能更容易嵌入到经典的二维数组中。 -
std::sort接受比较器作为第三个参数。任何op使得op(a,b)表示a < b都可以——函数、lambda、函子对象。由于内联,它通常也比具有相同功能的qsort更快。 -
我已经看到了解决方案,它们都将问题转化为解决问题 (std::array, std::vector, std::map) 。有没有办法用二维数组排序?毕竟,指针可以是迭代器。临时我没有看到解决方案,因为最里面的维度是一个数组并且数组是不可分配的。嵌入在结构中的数组是。