题目描述
给定n个字符串,请对n个字符串按照字典序排列。
输入描述
输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。
输出描述
数据输出n行,输出结果为按照字典序排列的字符串。
示例
输入: 9
\qquad
cap
\qquad
to
\qquad
cat
\qquad
card
\qquad
two
\qquad
too
\qquad
up
\qquad
boat
\qquad
boot
输出:
\qquad
boat
\qquad
boot
\qquad
cap
\qquad
card
\qquad
cat
\qquad
to
\qquad
too
\qquad
two
\qquad
up
思路
- 容器set可以随时向容器中插入元素,随时对元素进行快速查找,又需要按某种顺序对元素进行遍历。multiset是对set的延伸,相对于set而言,multiset包含重复的元素,即set把key一样的元素认为是同一个元素,并且对计数+1,multiset把key一样的元素认为是等价的元素,并且依次存储他们。本题将输入的单词input按某种顺序插入容器multiset中,然后将multiset容器中的元素打印出来。
#include <iostream>
#include <set>
using namespace std;
int main(){
int n;
cin>>n;
string input;
multiset<string> arr;
while(n--){
cin>>input;
arr.insert(input);
}
for(auto myarr:arr){
cout<<myarr<<endl;
}
return 0;
}
- 利用容器vector,将输入字符串逐个压进容器中,全部压入后对容器中的元素进行排序。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(string str1,string str2){
return str1<str2;
}
int main(){
int n;
cin>>n;
string input;
vector<string> arr;
while(n--){
cin>>input;
arr.push_back(input);
}
sort(arr.begin(),arr.end(),compare);
for(int i=0;i<arr.size();i++){
cout<<arr[i]<<endl;
}
return 0;
}