需要注意的是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;
}