我想对第三列的值进行排序,同时,第一列和第二列的值与使用数组的第三列的位置相同。
例如
排序前
2 30 2000
1 40 1000
3 10 4000
5 20 3000
4 50 5000
排序后
1 40 1000
2 30 2000
5 20 3000
3 10 4000
4 50 5000
我知道可以通过使用vector和std :: sort来完成,但是可以使用数组来实现相同的结果吗?
答案 0 :(得分:5)
您可以使用std::sort
对数组进行排序,您可以使用std::begin
和std::end
获取开头和结尾的迭代器以传递给sort
,您可以使用std::tuple
提供比较功能。
std::vector
与此任务的原始数组之间没有特别相关的区别。
示例代码:
#include <algorithm> // std::sort
#include <iterator> // std::begin, std::end
#include <iostream> // std::cout, std::endl
#include <tuple> // std::tie
using namespace std;
struct Triplet { int values[3]; };
template< int n >
void display( Triplet const (&array)[n] )
{
for( auto const& t : array )
{
cout << t.values[0] << ' ' << t.values[1] << ' ' << t.values[2] << endl;
}
}
auto main()
-> int
{
Triplet array[] =
{
{ 2, 30, 2000 },
{ 1, 40, 1000 },
{ 3, 10, 4000 },
{ 5, 20, 3000 },
{ 4, 50, 5000 }
};
auto const triplet_less = []( Triplet const& a, Triplet const& b ) -> bool
{
return
(tie( a.values[2], a.values[0], a.values[1] ) <
tie( b.values[2], b.values[0], b.values[1] ));
};
cout << "Original data: " << endl;
display( array );
sort( begin( array ), end( array ), triplet_less );
cout << endl;
cout << "Sorted data: " << endl;
display( array );
}