对容器元素重新排序的算法

假设我们要分析一组儿童故事中使用的单词,例如想知道他们使用了多少个6个或者以上字母组成的单词。每个单词只统计一次,不考虑它出现的次数。

程序代码如下:

#include <vector>
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
//comparison function to be userd to sort by word length
bool isShorter(const string &s1,const string &s2){
	return s1.size()<s2.size();
}

//determine whether a length of a given word is 6 or more
bool Gt6(string str){
	return str.size()>=6;
}

//odd or plural
string make_plural(int w,string param,string postfix){
	if(w>1)
		return param+postfix;
	else
		return param;
}

int main(int argc,char** argv)
{
	string array[]={"the","quick","red","fox","jumps","over","the","slow","red","turtle"};
	vector<string> words(array,array+sizeof(array)/sizeof(string));
	//sort words alphabetically so we can find the duplicates
	sort(words.begin(),words.end());
	/*	eliminate duplicate words
	*	unique reorders words so that each word appears once in the front portion of words
	*	and returns an iterator past the unique range;
	*	erase use a vector operation to remove the nonunique elements
	*/
	vector<string>::iterator enditer=unique(words.begin(),words.end());
	words.erase(enditer,words.end());
	//sort words by size ,but maintain alphabetic order for words of the same size
	stable_sort(words.begin(),words.end(),isShorter);
	int wc=count_if(words.begin(),words.end(),Gt6);
	cout<<wc<<" "<<make_plural(wc,"word","s")<<" 6 characters or longer"<<endl;
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-08 18:04:34

对容器元素重新排序的算法的相关文章

C++primer 对容器元素重新排序

1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 #include<fstream> 5 #include<vector> 6 #include<sstream> 7 8 using namespace std; 9 10 11 bool isShorter(const string &s1,const string &s2) 12 { 13

C++笔记(6):标准模板库STL:容器、迭代器和算法

STL(Standard Template Library)是C++标准库的一部分.STL的代码从广义上讲分为三类:容器.迭代器和算法. 1.容器 2.迭代器 3.算法  -------------------------------------------------------------------------------------------------------------------------- 1.容器 顺序容器容器是特定类型对象的集合.顺序容器为程序员提供控制元素存储和访问

stl中的容器、迭代器和算法----vector中的find实现

来源 http://blog.csdn.net/huangyimin/article/details/6133650 stl包括容器.迭代器和算法: 容器 用于管理一些相关的数据类型.每种容器都有它的优缺点,不同的容器反映出程序设计的不同需求.容器自身可能由数组或链表实现,或者容器中的每个元素都有特殊的关键值. 迭代器 用于遍历一个数据集中的每个元素.这些数据集可能是容器或者容器的子集.迭代器的主要优点是它们为任意类型的容器提供一个小巧并且通用(注意通用很重要)的接口.例如,迭代器接口的一个操作

容器适配器、STL算法简介

可以用某种顺序容器来实现 (让已有的顺序容器以栈/队列的方式工作) 1) stack: 头文件 <stack> 栈 -- 后进先出 2) queue: 头文件 <queue> 队列 -- 先进先出 3) priority_queue: 头文件 <queue> 优先级队列 -- 最高优先级元素总是第一个出列 都有3个成员函数: push: 添加一个元素; top: 返回栈顶部或队头元素的引用 pop: 删除一个元素 容器适配器上没有迭代器 STL中各种排序, 查找, 变序

C++ 安全并发访问容器元素

C++ 安全并发访问容器元素 2014-9-24 flyfish 标准库STL的vector, deque, list等等不是线程安全的 例如 线程1正在使用迭代器(iterator)读vector 线程2正在对该vector进行插入操作,使vector重新分配内存,这样就造成线程1中的迭代器失效 STL的容器 多个线程读是安全的,在读的过程中,不能对容器有任何写入操作 多个线程可以同时对不同的容器做写入操作. 不能指望任何STL实现来解决线程难题,必须手动做同步控制. 方案1 对vector进

STL(标准模板库)理论基础,容器,迭代器,算法

基本概念 STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间. STL的从广义上讲分为三类:algorithm(算法).container(容器)和iterator(迭代器),容器和算法通过迭代器可以进行无缝地连接.几乎所有的代码都采 用了模板类和模板函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会.在C++标准中,STL被组织为下面的13

字符串元素重排高效算法集合

以下各题均有时间复杂度为O(n*n)或以空间换取时间使得时间空间复杂度为O(n)的算法,在此均不考虑. 问题一.字符串移动 字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变,要求时间和空间复杂度最小 .如"afdg**fa**hjfkdsl"变换成"****afdgfahjfkdsl" 此题前后字符串的长度不变,由于最终一边只有'*',另一边为字母,可以设置两个指针fast和slow,当str[fast]不为'*'时,赋值

stl容器之--自定义结构体作为stl容器元素成员的使用

自定义结构体作为stl容器元素成员的设计要求之一是:在对待自定义类型时和内置类型必须是一致的,甚至自定义类型的支持更好. <C++标准程序库>: set和multiset set和multiset会根据特定的排序准则,自动将元素排序.两者不同在于multiset允许重复而set不允许. 只要是assignable.copyable.comparable(根据某个排序准则)的型别T,都可以成为set或multiset的元素型别.没有传入特别排序准则,就采用缺省准则less(这是一个仿函数,以op

C++11新特性应用--介绍几个新增的便利算法(不更改容器中元素顺序的算法)

总所周知,C++ STL中有个头文件,名为algorithm,即算法的意思. The header<algorithm>defines a collection of functions especially designed to be used on ranges of elements. 所以,要八一八这个头文件中C++11新增的几个算法,今天主要描述的几个算法不改变容器中元素的顺序. 这里还要啰嗦一句,使用stl算法时,如果与lambda表达式组合使用,那么代码会更加简洁. find_