转载于 https://www.cnblogs.com/Sherloy/p/4979159.html

vector的迭代器是随机访问迭代器,支持泛型算法的sort及其算法。

//vector排序
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <numeric>
using namespace std;
//两个谓词函数
bool isShorter(const string &pre,const string &cur)
{return (pre.size()<cur.size());
}bool GT4(const string &str)
{return (str.size()>=4);
}int main()
{cout<<"输入几个单词:"<<endl;string str;vector<string> strVec;while (cin >> str)strVec.push_back(str);//字典序sort(strVec.begin(),strVec.end());//去除重复的单词,返回一个迭代器,表示无重复的值得范围的结束vector<string>::iterator iter_unique = unique(strVec.begin(),strVec.end());//去除容器末尾重复的单词strVec.erase(iter_unique,strVec.end());sort(strVec.begin(),strVec.end(),isShorter);//按字符长短排序,相同长度的按字典序cout<<"排序后的单词:"<<endl;vector<string>::iterator iter = strVec.begin();while (iter!=strVec.end()){cout << *iter<<"\t";++iter;}cout<<endl;vector<string>::size_type cnt = count_if(strVec.begin(),strVec.end(),GT4);cout<<cnt<<"个单词的长度大于等于4。"<<endl;system("pause");return 0;
}

其中unique函数返回一个迭代器
unique后需要调用 erase 手动删除容器尾部重复的单词。

而list容器上的迭代器是双向的,不支持随机访问,因此不能使用需要随机访问迭代器的sort算法。C++为list容器提供了特有的算法。

//list排序
#include <iostream>
#include <string>
#include <list>
#include <algorithm>
#include <numeric>
using namespace std;bool isShorter(const string &pre,const string &cur)
{return (pre.size()<cur.size());
}bool GT4(const string &str)
{return (str.size()>=4);
}int main()
{cout<<"输入几个单词:"<<endl;string str;list<string> strList;while (cin >> str)strList.push_back(str);strList.sort();//字典序strList.unique();//去除重复的单词strList.sort(isShorter);//按字符长短排序,相同长度的按字典序cout<<"排序后的单词:"<<endl;list<string>::iterator iter = strList.begin();while (iter!=strList.end()){cout << *iter<<"\t";++iter;}cout<<endl;list<string>::size_type cnt = count_if(strList.begin(),strList.end(),GT4);cout<<cnt<<"个单词的长度大于等于4。"<<endl;system("pause");return 0;
}

在list的sort排序中,unique会自动去除重复的单词,程序员无需手动删除。

vector和list的排序相关推荐

  1. 对vector中的数据排序

    要求:从文件fin中读取数据,每行的格式如"王明 85",代表"姓名 成绩",具体有多少行不确定.按成绩从大到小排序,将结果写入文件fout. /*功能:从文件 ...

  2. vector向量容器元素排序与查找

    1.利用标准库函数sort()对vector进行排序 参考源码: #include <algorithm> #include <vector>vector<int> ...

  3. C++ vector数组实现多级排序—使用sort()函数

    之前有记录过 python 使用 numpy 的多级排序方法: numpy 多级排序 :lexsort 函数详解_地球被支点撬走啦的博客-CSDN博客_lexsort C++ 多级排序可以借用 sor ...

  4. C++vector容器使用sort排序(含升序以及降序)

    当我们在使用C++STL库中的vector容器时,难免会使用排序算法,我们不仅可以自己手写算法来实现,同时也可以使用algorithm头文件内的sort函数进行排序,其实现代码如下: #include ...

  5. vector 对某个下标排序_Python实现堆排序

    """堆排序"""def max_heapify(heap,heapSize,root): # 调整列表中的元素并保证以root为根的堆是一 ...

  6. vector容器中数据的排序方法

    前言 在项目中经常会遇到对vector容器中数据排序的情况,有时候vector中数据还常常是pair关联容器.此处给出一个使用demo,使用了C++中的lambda表达式. #include" ...

  7. C++sort如何使用lambda表达式对一维vector和二维vector进行排序

    文章目录 一维vector排序 二维vector排序 Lambda的语法 Capture(用以访问外部作用域) 问题:今天刷题的时候,需要对二维vectorn×2_{n\times 2}n×2​按照第 ...

  8. 对vector<int> 的数组使用sort排序出错

    刷题时,对于多个vector数组按照第二个元素的大小进行排序,其实很简单. 力扣1710. Maximum Units on a Truck 但是一开始代码写的是 class Solution {pu ...

  9. C++标准库 vector排序

    项目中需要对坐标点排序,转自https://blog.csdn.net/hnu_zxc/article/details/6746029/.侵删. 前天要做一个对C++ STL的vector容器做一个排 ...

  10. C++ vector 排序

    C++ vector 排序 2009-12-21 17:17 最近做的东西,要将vector 中的内容输出,结果发现有些文件被交替反复打开,所以就想吧vector 中的元素排序,学习中发现下面这篇文章 ...

最新文章

  1. 图像处理包括哪些东东?
  2. ASP BASE64 跨防火墙
  3. 永恒传奇三服务器维护中,仙境传说ro3月3日5点-10点停服维护
  4. hbase 2.2.6表及数据的增删改查命令行示例
  5. 为什么我们对90后的迎合难以成功?
  6. Spring Boot 2 实践记录之 条件装配
  7. Android Studio(13)--- Git之使用GitHub搭建远程仓库
  8. E: Write error - write (28 No space left on device)
  9. JAVA的DES加密解密在windows上测试一切正常,在linux上异常
  10. 计算机派位志愿填报技巧,小升初电脑派位 填报也有技巧
  11. 期末考试打乱考研数学复习,该怎么继续?
  12. 淘特,阿里在下沉市场的一把好刀
  13. 人月神话(四)削足适履、提纲挈领、未雨绸缪
  14. Laravel:whereIn子查询
  15. 74ls163是同步清零吗_74LS163是具有同步清零功能的十六进制计数器,要
  16. SetCapture GetCapture ReleaseCapture
  17. python简答题及答案查询公众号和软件_Python 抓取微信公众号账号信息的方法
  18. 【项目展示】自己用C语言编写的象棋小程序
  19. Aspose.word组件介绍
  20. Cannot render error page for request [/list.html] and exception [An error happened during template p

热门文章

  1. Mysql5.7中文乱码
  2. HCIE-RS面试--STP选举原理,状态机和接口角色
  3. CLient-Initiated L2TP主机上网问题详解
  4. OSPFv3中LSA详解(三)——Network LSA变化
  5. Java高并发程序设计学习笔记(八):NIO和AIO
  6. React Native常用组件之ListView组件
  7. vmtools 安装不上的方法 我这里介绍下vm14 Ubuntu的系统
  8. js原生设计模式——8单例模式之简约版属性样式方法库
  9. 模板类的声明和定义要放在同一个文件
  10. 使用Ajax.dll前台调用后台方法及错误示例