请教怎么用c或c++对几十万行文本进行排序、删除重复行

请问如何用c或c++对几十万行文本进行排序、删除重复行?
方法有不少:
1-导入数据库,排序、删除重复行,输出;
2-用工具软件,如UE;
3-在linux下先sort后uniq;

但是现在需要集成到自己的程序里,希望大家能给出较详细的代码例子,谢谢!

------解决方案--------------------
数据太多,导入数据库比较快 ...
------解决方案--------------------
代码例子么 ...
------解决方案--------------------
和别的程序接口太麻烦……

同样的功能我可能一天需要用几十次。所以最好还是集成到自己的程序里,这样点一下按钮就搞定。
------解决方案--------------------
一天需要用几十次

这种频度要求,用脚本是最方便的。
------解决方案--------------------
导入数据库吧,这些排序,删除重复行的事情要数据库帮你去做吧
------解决方案--------------------
不嫌麻烦的话!!一行一行的看,在删除!!嘿嘿
------解决方案--------------------
Excel的CSV格式文件就是文本,用“,”或“ ”分隔。
如果不编程的话,用Excel或Access导入文件然后排序就行了
------解决方案--------------------
不知怎么搞的一帖出来,漂亮的缩格就没有了……(解决方法是:把代码拷到VC里,选中,Alt+F8)
------解决方案--------------------
MS的数据库引擎比如ADO可以操作文本文件的,.txt,.csv都可以用select执行。写好SQL语句用ADO执行就是了
------解决方案--------------------
用std::sort就可以了,一个很普通的排序,几十万行也不是很大,几秒种应该就可以搞定。

------解决方案--------------------
不错~~
------解决方案--------------------
mark
------解决方案--------------------
#include <vector>
#include <fstream>
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;
#define LARGENUMBER 6293815
class CHashString
{
public:
CHashString(){ InitHash(); }
void InitHash()
{
index = 1;
sum = 0;
multiple = LARGENUMBER;
}
unsigned long ConsumeChar( char c )
{
sum+=multiple*index++*c;
multiple*=LARGENUMBER;
return sum;
}
unsigned long GetCurSum(){ return sum; }
public:
int index;
unsigned long sum;
unsigned long multiple;
};


typedef vector <pair <char*, unsigned long> > StringIndex;//first 是指针,second是hash值
class CreateStringIndex
{
public:
CreateStringIndex():buffer(NULL){}
~CreateStringIndex(){ delete []buffer; }
StringIndex & GetStringIndex(){ return index; }
bool Create(const char *pFileName )
{
size_t pInd=0;
CHashString hashString;
StringIndex::value_type temp;
ifstream infile( pFileName, ios::binary);
if( infile.fail() ){
return false;
}
infile.seekg(0,ios::end);
length=infile.tellg();
infile.seekg(0,ios::beg);
delete []buffer;
buffer = new char[length+1];
istreambuf_iterator <char> it(infile);
istreambuf_iterator <char> ed;
while( pInd < length )
{
if( *it == '\r ' || *it == '\n ' )
{
buffer[pInd++]=0;
++it;
if( temp.first )
{
temp.second = hashString.GetCurSum();
index.push_back( temp );
}
hashString.InitHash();
temp.first = NULL;
}else
{
hashString.ConsumeChar( *it );
if( temp.first== NULL )