vector和list的排序
转载于 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的排序相关推荐
- 对vector中的数据排序
要求:从文件fin中读取数据,每行的格式如"王明 85",代表"姓名 成绩",具体有多少行不确定.按成绩从大到小排序,将结果写入文件fout. /*功能:从文件 ...
- vector向量容器元素排序与查找
1.利用标准库函数sort()对vector进行排序 参考源码: #include <algorithm> #include <vector>vector<int> ...
- C++ vector数组实现多级排序—使用sort()函数
之前有记录过 python 使用 numpy 的多级排序方法: numpy 多级排序 :lexsort 函数详解_地球被支点撬走啦的博客-CSDN博客_lexsort C++ 多级排序可以借用 sor ...
- C++vector容器使用sort排序(含升序以及降序)
当我们在使用C++STL库中的vector容器时,难免会使用排序算法,我们不仅可以自己手写算法来实现,同时也可以使用algorithm头文件内的sort函数进行排序,其实现代码如下: #include ...
- vector 对某个下标排序_Python实现堆排序
"""堆排序"""def max_heapify(heap,heapSize,root): # 调整列表中的元素并保证以root为根的堆是一 ...
- vector容器中数据的排序方法
前言 在项目中经常会遇到对vector容器中数据排序的情况,有时候vector中数据还常常是pair关联容器.此处给出一个使用demo,使用了C++中的lambda表达式. #include" ...
- C++sort如何使用lambda表达式对一维vector和二维vector进行排序
文章目录 一维vector排序 二维vector排序 Lambda的语法 Capture(用以访问外部作用域) 问题:今天刷题的时候,需要对二维vectorn×2_{n\times 2}n×2按照第 ...
- 对vector<int> 的数组使用sort排序出错
刷题时,对于多个vector数组按照第二个元素的大小进行排序,其实很简单. 力扣1710. Maximum Units on a Truck 但是一开始代码写的是 class Solution {pu ...
- C++标准库 vector排序
项目中需要对坐标点排序,转自https://blog.csdn.net/hnu_zxc/article/details/6746029/.侵删. 前天要做一个对C++ STL的vector容器做一个排 ...
- C++ vector 排序
C++ vector 排序 2009-12-21 17:17 最近做的东西,要将vector 中的内容输出,结果发现有些文件被交替反复打开,所以就想吧vector 中的元素排序,学习中发现下面这篇文章 ...
最新文章
- 图像处理包括哪些东东?
- ASP BASE64 跨防火墙
- 永恒传奇三服务器维护中,仙境传说ro3月3日5点-10点停服维护
- hbase 2.2.6表及数据的增删改查命令行示例
- 为什么我们对90后的迎合难以成功?
- Spring Boot 2 实践记录之 条件装配
- Android Studio(13)--- Git之使用GitHub搭建远程仓库
- E: Write error - write (28 No space left on device)
- JAVA的DES加密解密在windows上测试一切正常,在linux上异常
- 计算机派位志愿填报技巧,小升初电脑派位 填报也有技巧
- 期末考试打乱考研数学复习,该怎么继续?
- 淘特,阿里在下沉市场的一把好刀
- 人月神话(四)削足适履、提纲挈领、未雨绸缪
- Laravel:whereIn子查询
- 74ls163是同步清零吗_74LS163是具有同步清零功能的十六进制计数器,要
- SetCapture GetCapture ReleaseCapture
- python简答题及答案查询公众号和软件_Python 抓取微信公众号账号信息的方法
- 【项目展示】自己用C语言编写的象棋小程序
- Aspose.word组件介绍
- Cannot render error page for request [/list.html] and exception [An error happened during template p