C++STL算法 find_first_of根据梁山好汉的姓名长度进行查找

需要注意的是find_first_of和find前者是集合中的任意元素对应即可,后者则是完全符合条件

#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <deque>
#include <string>

using namespace std;

class Hero
{
private:
	string name;// 名字
	string star;// 星宿
	string nickname;// 绰号
public:
	Hero(string star, string nickname, string name)
	{
		this->star = star;
		this->nickname = nickname;
		this->name = name;
	};
	bool operator==(int a)
	{
		return this->name.length() == a;
	};
	string getName()
	{
		return this->name;
	}
};

int main()
{
	vector<Hero> vecShuiHu;
	vecShuiHu.pushback(Hero("天魁星", "呼保义", "宋江")); vecShuiHu.pushback(Hero("天罡星", "玉麒麟", "卢俊义")); vecShuiHu.pushback(Hero("天机星", "智多星", "吴用")); vecShuiHu.pushback(Hero("天闲星", "入云龙", "公孙胜")); vecShuiHu.pushback(Hero("天勇星", "大刀", "关胜")); vecShuiHu.pushback(Hero("天雄星", "豹子头", "林冲"));
	vecShuiHu.pushback(Hero("天猛星", "霹雳火", "秦明")); vecShuiHu.pushback(Hero("天威星", "双鞭", "呼延灼")); vecShuiHu.pushback(Hero("天英星", "小李广", "花荣")); vecShuiHu.pushback(Hero("天贵星", "小旋风", "柴进")); vecShuiHu.pushback(Hero("天富星", "扑天雕", "李应")); vecShuiHu.pushback(Hero("天满星", "美髯公", "朱仝"));
	vecShuiHu.pushback(Hero("天孤星", "花和尚", "鲁智深")); vecShuiHu.pushback(Hero("天伤星", "行者", "武松")); vecShuiHu.pushback(Hero("天立星", "双枪将", "董平")); vecShuiHu.pushback(Hero("天捷星", "没羽箭", "张清")); vecShuiHu.pushback(Hero("天暗星", "青面兽", "杨志")); vecShuiHu.pushback(Hero("天佑星", "金枪手", "徐宁"));
	vecShuiHu.pushback(Hero("天空星", "急先锋", "索超")); vecShuiHu.pushback(Hero("天速星", "神行太保", "戴宗")); vecShuiHu.pushback(Hero("天异星", "赤发鬼", "刘唐")); vecShuiHu.pushback(Hero("天杀星", "黑旋风", "李逵")); vecShuiHu.pushback(Hero("天微星", "九纹龙", "史进")); vecShuiHu.pushback(Hero("天究星", "没遮拦", "穆弘"));
	vecShuiHu.pushback(Hero("天退星", "插翅虎", "雷横")); vecShuiHu.pushback(Hero("天寿星", "混江龙", "李俊")); vecShuiHu.pushback(Hero("天剑星", "立地太岁", "阮小二")); vecShuiHu.pushback(Hero("天竟星", "船火儿", "张横")); vecShuiHu.pushback(Hero("天罪星", "短命二郎", "阮小五")); vecShuiHu.pushback(Hero("天损星", "浪里白条", "张顺"));
	vecShuiHu.pushback(Hero("天败星", "活阎罗", "阮小七")); vecShuiHu.pushback(Hero("天牢星", "病关索", "杨雄")); vecShuiHu.pushback(Hero("天慧星", "拚命三郎", "石秀")); vecShuiHu.pushback(Hero("天暴星", "两头蛇", "解珍")); vecShuiHu.pushback(Hero("天哭星", "双尾蝎", "解宝")); vecShuiHu.pushback(Hero("天巧星", "浪子", "燕青"));
	vecShuiHu.pushback(Hero("地魁星", "神机军师", "朱武")); vecShuiHu.pushback(Hero("地煞星", "镇三山", "黄信")); vecShuiHu.pushback(Hero("地勇星", "病尉迟", "孙立")); vecShuiHu.pushback(Hero("地杰星", "丑郡马", "宣赞")); vecShuiHu.pushback(Hero("地雄星", "井木犴", "郝思文")); vecShuiHu.pushback(Hero("地威星", "百胜将", "韩滔"));
	vecShuiHu.pushback(Hero("地英星", "天目将", "彭玘")); vecShuiHu.pushback(Hero("地奇星", "圣水将", "单廷珪")); vecShuiHu.pushback(Hero("地猛星", "神火将", "魏定国")); vecShuiHu.pushback(Hero("地文星", "圣手书生", "萧让")); vecShuiHu.pushback(Hero("地正星", "铁面孔目", "裴宣")); vecShuiHu.pushback(Hero("地阔星", "摩云金翅", "欧鹏"));
	vecShuiHu.pushback(Hero("地阖星", "火眼狻猊", "邓飞")); vecShuiHu.pushback(Hero("地强星", "锦毛虎", "燕顺")); vecShuiHu.pushback(Hero("地暗星", "锦豹子", "杨林")); vecShuiHu.pushback(Hero("地轴星", "轰天雷", "凌振")); vecShuiHu.pushback(Hero("地会星", "神算子", "蒋敬")); vecShuiHu.pushback(Hero("地佐星", "小温侯", "吕方"));
	vecShuiHu.pushback(Hero("地佑星", "赛仁贵", "郭盛")); vecShuiHu.pushback(Hero("地灵星", "神医", "安道全")); vecShuiHu.pushback(Hero("地兽星", "紫髯伯", "皇甫端")); vecShuiHu.pushback(Hero("地微星", "矮脚虎", "王英")); vecShuiHu.pushback(Hero("地慧星", "一丈青", "扈三娘")); vecShuiHu.pushback(Hero("地暴星", "丧门神", "鲍旭"));
	vecShuiHu.pushback(Hero("地然星", "混世魔王", "樊瑞")); vecShuiHu.pushback(Hero("地猖星", "毛头星", "孔明")); vecShuiHu.pushback(Hero("地狂星", "独火星", "孔亮")); vecShuiHu.pushback(Hero("地飞星", "八臂哪吒", "项充")); vecShuiHu.pushback(Hero("地走星", "飞天大圣", "李衮")); vecShuiHu.pushback(Hero("地巧星", "玉臂匠", "金大坚"));
	vecShuiHu.pushback(Hero("地明星", "铁笛仙", "马麟")); vecShuiHu.pushback(Hero("地进星", "出洞蛟", "童威")); vecShuiHu.pushback(Hero("地退星", "翻江蜃", "童猛")); vecShuiHu.pushback(Hero("地满星", "玉幡竿", "孟康")); vecShuiHu.pushback(Hero("地遂星", "通臂猿", "侯健")); vecShuiHu.pushback(Hero("地周星", "跳涧虎", "陈达"));
	vecShuiHu.pushback(Hero("地隐星", "白花蛇", "杨春")); vecShuiHu.pushback(Hero("地异星", "白面郎君", "郑天寿")); vecShuiHu.pushback(Hero("地理星", "九尾龟", "陶宗旺")); vecShuiHu.pushback(Hero("地俊星", "铁扇子", "宋清")); vecShuiHu.pushback(Hero("地乐星", "铁叫子", "乐和")); vecShuiHu.pushback(Hero("地捷星", "花项虎", "龚旺"));
	vecShuiHu.pushback(Hero("地速星", "中箭虎", "丁得孙")); vecShuiHu.pushback(Hero("地镇星", "小遮拦", "穆春")); vecShuiHu.pushback(Hero("地嵇星", "操刀鬼", "曹正")); vecShuiHu.pushback(Hero("地魔星", "云里金刚", "宋万")); vecShuiHu.pushback(Hero("地妖星", "摸着天", "杜迁")); vecShuiHu.pushback(Hero("地幽星", "病大虫", "薛永"));
	vecShuiHu.pushback(Hero("地伏星", "金眼彪", "施恩")); vecShuiHu.pushback(Hero("地僻星", "打虎将", "李忠")); vecShuiHu.pushback(Hero("地空星", "小霸王", "周通")); vecShuiHu.pushback(Hero("地孤星", "金钱豹子", "汤隆")); vecShuiHu.pushback(Hero("地全星", "鬼脸儿", "杜兴")); vecShuiHu.pushback(Hero("地短星", "出林龙", "邹渊"));
	vecShuiHu.pushback(Hero("地角星", "独角龙", "邹润")); vecShuiHu.pushback(Hero("地囚星", "旱地忽律", "朱贵")); vecShuiHu.pushback(Hero("地藏星", "笑面虎", "朱富")); vecShuiHu.pushback(Hero("地平星", "铁臂膊", "蔡福")); vecShuiHu.pushback(Hero("地损星", "一枝花", "蔡庆")); vecShuiHu.pushback(Hero("地奴星", "催命判官", "李立"));
	vecShuiHu.pushback(Hero("地察星", "青眼虎", "李云")); vecShuiHu.pushback(Hero("地恶星", "没面目", "焦挺")); vecShuiHu.pushback(Hero("地丑星", "石将军", "石勇")); vecShuiHu.pushback(Hero("地数星", "小尉迟", "孙新")); vecShuiHu.pushback(Hero("地阴星", "母大虫", "顾大嫂")); vecShuiHu.pushback(Hero("地刑星", "菜园子", "张青"));
	vecShuiHu.pushback(Hero("地壮星", "母夜叉", "孙二娘")); vecShuiHu.pushback(Hero("地劣星", "活闪婆", "王定六")); vecShuiHu.pushback(Hero("地健星", "险道神", "郁保四")); vecShuiHu.pushback(Hero("地耗星", "白日鼠", "白胜")); vecShuiHu.pushback(Hero("地贼星", "鼓上蚤", "时迁")); vecShuiHu.pushback(Hero("地狗星", "金毛犬", "段景住"));

	deque<int> ideq;
	ideq.push_back(3);// 姓名为三个字
	ideq.push_back(4);// 姓名为四个字
	ideq.push_back(5);// 姓名为五个字

	vector<Hero>::iterator pos;

	// 寻找姓名长度为3,4,5中任意一个的第一个
	pos = find_first_of(vecShuiHu.begin(), vecShuiHu.end(), ideq.begin(), ideq.end());
	if (pos != vecShuiHu.end())
	{
		cout << "找到了,位置在:" << distance(vecShuiHu.begin(), pos) << "\t" << pos->getName() << endl;
	}
	else
	{
		cout << "没有找到" << endl;
	}

	pos = find_first_of(vecShuiHu.begin(), vecShuiHu.end(), ideq.begin(), ideq.end(), [](Hero h,int a)->bool{return a == h.getName().length(); });// ideq.begin(), ideq.end()区间对应的是a
	if (pos != vecShuiHu.end())
	{
		cout << "找到了,位置在:" << distance(vecShuiHu.begin(), pos) <<"\t"<< pos->getName() << endl;
	}
	else
	{
		cout << "没有找到" << endl;
	};

	return EXIT_SUCCESS;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淘汰猫とても

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值