首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

小妹急问一个二维数组排序的有关问题~

2013-06-26 
小妹急问一个二维数组排序的问题~~有近20万条数据,每条数据是该数据的编号和一个数值。现在要根据数值进行

小妹急问一个二维数组排序的问题~~
有近20万条数据,每条数据是该数据的编号和一个数值。

现在要根据数值进行由小到大的排序,排序结果是一个二维数组,第一个是该数据的编号,第二个是对应编号的数值。

请问怎么实现啊?

谢谢了

小妹急问一个二维数组排序的有关问题~ 排序
[解决办法]
将编号和数值放在一个结构体里,然后就是对一个一维结构体数组的排序了。可以用系统函数qsort
[解决办法]
两个方法:
1、自己写一个排序方法,比如快排,按数值排序,交换两个数字的时候,把编号也交换了
2、把编号和数值弄成一个对象,然后用stl sort排序,自己重写一个比较函数即可
[解决办法]

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <sstream>
using namespace std;
void test()
{
struct Item
{
Item() : seq(0), value(0){}
Item(int s, int v) : seq(s), value(v) {}
int seq;
int value;
};
vector<Item> v(10);
int vl = 100;
int s = 1;
transform(v.begin(), v.end(), v.begin(), [&](const Item&)->Item{return Item(s++, vl--);});
transform(v.begin(), v.end(), ostream_iterator<string>(cout, "\n"), [](const Item&v) { string str; stringstream ss; ss << v.seq << " " << v.value; getline(ss, str); return str; } );
cout << "*****\n";
sort(v.begin(), v.end(), [](const Item& v1, const Item& v2){ return v1.value < v2.value; }); // < 升序, > 降序
transform(v.begin(), v.end(), ostream_iterator<string>(cout, "\n"), [](const Item&v) { string str; stringstream ss; ss << v.seq << " " << v.value; getline(ss, str); return str; } );
}

热点排行