/*****************************************************************************
*Ex13-2.cpp : 定义控制台应用程序的入口点。
*作用:
* 从一个文件中把里面的单词全部读出,然后排序,并与原来单词组成一个pair
*疑问:
* 对于for_each算法,对于函数可以传递多个参数吗?如果可以,怎么操作
*错误:
* 因为map中不能添加key相同的项,所以这里会丢失数据
******************************************************************************
*History:
*******************************************************************************
* 20 Jun 2006 xmc create
*******************************************************************************/
#include "stdafx.h"
#include <string>
#include <algorithm>
#include <vector>
#include <map>
#include <fstream>
#include <utility>
using namespace std;
void PrintWord(string& str)
{
cout<<str<<endl;
return;
}
void SortWord(string& str)
{
sort(str.begin(),str.end());
return;
}
int main(int argc, char* argv[])
{
//从文件中读出单词,并放入一个vector中, vector的成员是pair
map<string,string> mapWords;
vector<string> tmpWords;
vector<string> oldWords;
string filename("c://hello.txt");
ifstream ifs(filename.c_str());
if(!ifs.is_open())
{
cout<<"文件打开失败!"<<endl;
return -1;
}
cout<<"成功打开文件,正在从文件中读出数据....."<<endl;
copy(istream_iterator<string>(ifs),istream_iterator<string>(),back_inserter(tmpWords));
copy(tmpWords.begin(),tmpWords.end(),back_inserter(oldWords));
for_each(tmpWords.begin(),tmpWords.end(),PrintWord);
cout<<"对每个单词进行排序"<<endl;
for_each(tmpWords.begin(),tmpWords.end(),SortWord);
for_each(tmpWords.begin(),tmpWords.end(),PrintWord);
//完了,没辙了,只好出晕招了
vector<string>::iterator iter;
vector<string>::iterator iter1 = oldWords.begin();
for(iter = tmpWords.begin(); iter != tmpWords.end(); iter++)
{
mapWords.insert(mapWords.end(),make_pair<string,string>(*iter,*iter1));
iter1++;
}
//打印最后操作结果
cout<<"打印最后操作结果..."<<endl;
map<string,string>::iterator iterMap = mapWords.begin();
for(; iterMap != mapWords.end(); iterMap++)
{
cout<<endl;
cout<<(*iterMap).first<<endl;
cout<<(*iterMap).second<<endl;
}
return 0;
}