您可以用std::sort轻松做到这一点。你需要提供一个自定义比较器,但那不是问题。
它容易得多,如果你使用std::array来定义您的2维数组,虽然如下:
std::sort(twoDArray.begin(), twoDArray.end(), [](const std::array< int, 2 >& a, const std::array< int, 2 >& b)
{
return a[1] < b[1];
}
做同样具有C-:
std::array< std::array< int, 2 >, 4 > twoDArray;
如下然后,您可以对它进行排序样式数组仍然是可能的,但是需要实现一个自定义迭代器,该迭代器一次将整个“行”推进,因为标准迭代器(即指针)会将2D数组视为1D。
下面是使用C++阵列一个完整的例子:
std::array< std::array< int, 2 >, 4 > arr = {{ { 1, 4 },
{ 2, 3 },
{ 3, 2 },
{ 4, 1 } }};
std::sort(arr.begin(), arr.end(), [](const std::array< int, 2 >& a, const std::array< int, 2 >& b)
{
return a[0] < b[0];
});
std::sort(arr.begin(), arr.end(), [](const std::array< int, 2 >& a, const std::array< int, 2 >& b)
{
return a[1] < b[1];
});
来源
2014-12-02 09:39:56
Goz