前言:
容器在实际中用的还是比较多的,比如vector、list、map等,所以难免遇到需要排序的情况,也就随之会遇到去重的问题。
当然,自己循环遍历也能解决问题,这里介绍的是使用标准库算法
思路:
1、对容器排序,使用 sort 方法
2、unique 对排序后的容器重新输入,每个元素只出现一次,重复的就依次排在后边,返回不重复末尾的迭代器
3、利用之前得到的迭代器进行删除 erase
示例:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <list>
using namespace std;
//vector去重
void removal_vector( vector<string> &wordVec )
{
//排序
sort( wordVec.begin(), wordVec.end() );
//不重复的排序,
auto uniqueIter = unique( wordVec.begin(), wordVec.end() );
//删除后边重复的
wordVec.erase( uniqueIter, wordVec.end() );
}
//list去重
void removal_list( list<string> &wordList )
{
//排序
wordList.sort();
//不重复排序
auto uniqueIter = unique( wordList.begin(), wordList.end() );
//删除后边重复的
wordList.erase( uniqueIter, wordList.end() );
}
//by zhaocl
int main()
{
list <string> wordList;
vector<string> wordVec;
string word;
//输入元素
while( cin >> word )
{
wordVec.push_back( word );
}
removal_vector( wordVec );
//输出元素
for( auto i : wordVec )
{
cout << i << endl;
}
system( "pause" );
return 0;
}
说明:
1、list有内置排序方法sort,vector则没有,需要使用头文件 algorithm 中的 sort 方法
2、标准库算法对迭代器而不是容器进行操作,算法不能(直接)添加或删除元素