关于STL中sort的一个小小用法的疑惑,大家都来看看!!!
大家先看个题目:
编写一个程序,读入几行大写文本,并产生文本词语索引,即不同的单词列表.把以A开头的单词存储在一个链表中,把以B开头的单词存储在另一个链表中,以此类推.
在读完所有的文本行之后,对每个列表进行排序,然后按字母顺序打印这些单词.
我写的程序如下(我用的是DEV_CPP,编译正确,结果也是正确的,用VC不行,但这不是我今天想问的主要问题,想问的问题在最后面)
#include <iostream>
#include <vector>
#include <list>
#include <string>
#include <algorithm>
using namespace std;
bool StringLessThan(string a,string b)
{
return a>b;
}
//bool StringMoreThan( const list<string> & s1, const list<string> & s2) //改后增加的函数
//{
// return s1.front()>s2.front();
//}
int main()
{
vector< list<string> > wordsort(26);//定义26个空的链
string word;
cout<<"enter some words,when it is #,stop.\n";
cin>>word;
int pos;
while(word!="#") //把A的单词放入链wordsort[0]中,把B的单词放入链wordsort[1]中,依此类推
{
pos=word[0]-'A';
wordsort[pos].push_back(word);
cin>>word;
}
for(int i=0; i<26; i++) //该循环主要是对每条链中的单词进行从大到小的排序
if(!wordsort[i].empty())
wordsort[i].sort(StringLessThan);
//sort(wordsort.begin(),wordsort.end(),StringMoreThan); //该行为改后增加的一个函数调用
for(int i=0; i<26; i++)
if(!wordsort[i].empty())
{
for(list<string>::iterator it=wordsort[i].begin();
it!=wordsort[i].end(); it++)
cout<<*it<<" ";
cout<<endl;
}
getchar();
getchar();
return 0;
}
运行示例:
input:
enter some words,when it is #,stop.
DA JIA HAO A
WO SHI CHEN XI DE ZHAO YAN
#
output:
A
CHEN
DE DA
HAO
JIA
SHI
WO
XI
YAN
ZHAO
现在,如果我想input的内容不变,但是output的顺序倒过来,也就是
output:
ZHAO
YAN
XI
WO
SHI
JIA
HAO
DE DA
CHEN
A
于是我改了一下程序,也就是添加了注释中的内容,这样子编译没有错,但是结果却出错了,各位大侠帮忙看下,不胜感激!!!