两个排序,求好的解法,该怎么解决

两个排序,求好的解法
1)给一个文件(文件名已知,文件大小约在1M-10M之间)需把文件中数据全部顺序全部颠倒一下,并存到另外一个文件中(文件名已知),原文件中第0个字节放到最后字节,第1字节放到倒数第二字节,依次类推,编写一个函数实现此功能

2)给你一个文本文件,要求按行进行字母的升序排序,即每行第一个字母越小的越排在前面,第一字母相同的比较第二字母,依次类推,输出结果,保存到另外一个文件中(文件名均已知)

------解决方案--------------------
1) 读到内存里,颠倒了在存回去

2)读到一个 map <string, int> 了

写个string 的排序函数。。。。。 - -
------解决方案--------------------
2)

#include "iostream "
#include "map "
#include "string "
#include "fstream "

using namespace std;

int main()
{
map <string, int> data;

ifstream file( "test.txt ");

if (file.fail())
return 1;

while (!file.eof())
{
string s;
getline(file, s);
data[s] = 0;
}

file.close();

ofstream ofile( "output.txt ");

if (ofile.fail())
return 1;

for (map <string, int> ::iterator i = data.begin(); i != data.end(); ++i)
ofile < <(i-> first) < <endl;

ofile.close();


return 0;
}