使用list, vector 等这些标准库的类,查找是比较常用的功能,但是这些类没有提供find函数,因为对于自定义类型,它不知道如何去比较两个类型。

http://www.cppreference.com/wiki/container/list/start

但是STL提供了一种通用的查找函数find(iterator it0,iterator it1,target),下面介绍如何使用这个查找函数。

// 定义一个简单的数据结构Inst.
class Inst{
public:
Inst(string nm,int val){
name = nm;
value = val;
}
// 之前这里有个分号,并不应该出现的,谢谢提醒
string Name() const{
return name;
}
int Value() const{
return value;
}
  private:
string name;
int value;
};

// 定义比较函数,重载==运算符。
// name 和 value 都一样, 则 实例一样
booloperator==(const Inst &a, const Inst &b){
return (a.Name()==b.Name() && a.Value()==b.Value());
}

// name 一样, 则 实例一样
booloperator==(const Inst &a, conststring name){
return (a.Name()==name);
}

测试如下,

list<Inst> elist;
Inst p1("abc",3);
Inst p2("abcdef",6);

list<Inst>::iterator it;
// find 需要包含头文件 <algorithm>
it = std::find(elist.begin(),elist.end(),p2);
if(it!=elist.end())
cout << (*it).Value() << endl;
string name ="abc";
it = std::find(elist.begin(),elist.end(),name);
if(it!=elist.end())
cout << (*it).Value() << endl;

但是如果list保存指针,如下,

list<Inst*> elist;
Inst* p1 =new Inst("abc",3);
Inst* p2 = New Inst("abcdef",6);
list<Inst*>::iterator it;
it = std::find(elist.begin(),elist.end(),p2);
if(it!=elist.end())
cout << (*it)->Value() << endl;
string name ="abc";
it = std::find(elist.begin(),elist.end(),name);
if(it!=elist.end())
cout << (*it)->Value() << endl;

那么比较函数就需要做一些修改,如下,

booloperator==(const Inst* a,const Inst* b){
return (a->Name()==b->Name() && a->Value()==b->Value());
}
booloperator==(const Inst* a, conststring nm){
return (a->Name()==nm);
}

在学习STL过程中,如果有错误的地方,还请各位指正,谢谢!

转载于:https://www.cnblogs.com/Frandy/archive/2011/06/03/STL_Find_List.html

STL(1)——查找函数find的使用相关推荐

  1. C++ STL之查找函数总结

    STL中更有很多函数十分常用,其中查找是使用最高频的函数之一,以下针对C++11的查找进行总结. 1.查找(find) 1.1 std::find() 1.1.1 常用形式 //C++20前 temp ...

  2. C++ STL 常用查找算法

    C++ STL 常用查找算法 adjacent_find() 在iterator对标识元素范围内,查找一对相邻重复元素,找到则返回指向这对元素的第一个元素的迭代器.否则返回past-the-end. ...

  3. C++STL常用查找算法

    C++STL常用查找算法 学习目标 算法简介 find 功能描述 函数原型 示例 总结 find_if 功能描述 函数原型 示例 总结 adjacent_find 功能描述 函数原型 示例 总结 bi ...

  4. 数据结构(一)STL二分法查找实现及上下界

    一.二分查找思想 在有序表中查找元素常常使用二分查找(Binary Search),有时也译为折半查找,它的基本思想就像是"猜数字游戏":你在心里想一个不超过1000的正整数,我可 ...

  5. R语言apropos函数查找包含特定字符的函数、find函数查找函数所在的位置实战

    R语言apropos函数查找包含特定字符的函数.find函数查找函数所在的位置实战 目录 R语言apropos函数实战 # 基本语法 #apropos函数 # find函数 apropos函数返回一个 ...

  6. STL区间成员函数及区间算法总结

    STL区间成员函数及区间算法总结 在这里总结下可替代循环的区间成员函数和区间算法: 相比单元素遍历操作,使用区间成员函数的优势在于: 1)更少的函数调用 2)更少的元素移动 3)更少的内存分配 在区间 ...

  7. stl string常用函数

    原文地址:http://hi.baidu.com/baowup/blog/item/3a27465c86d71546faf2c066.html/cmtid/de1ef3f0de7554a0a40f52 ...

  8. C# 二进制字节流查找函数IndexOf

    C# 二进制字节流查找函数IndexOf /// <summary>/// 报告指定的 System.Byte[] 在此实例中的第一个匹配项的索引./// </summary> ...

  9. python字符串find函数-python字符串查找函数的用法详解

    python字符串查找函数的使用 打开Python开发工具IDLE,新建"findstr.py'文件,并写代码如下: s ='/ab/bx,.s' print (s.find('/x')) ...

最新文章

  1. jquery获取浏览器宽高
  2. MySQL存储过程_创建-调用
  3. php member limit,PHPAPP注入第十枚(未过滤)
  4. MySQL 可重复读,差点背上一个 P0 事故!
  5. Java8 HashMap源码分析
  6. mysql8解决区分大小写问题_球磨机“包球”和“饱磨”分不清?点进来快速区分,解决问题...
  7. 中国风海报灵感|几款各具特色的汉字活动海报设计
  8. AdaPrompt:进一步将下游任务融入到预训练模型
  9. CentOS 7 使用ip addr查询不到IP
  10. 传奇电子cq9跳高高、跳起来规则与操作技巧
  11. 从技术角度,设备过保就坏,是怎么实现的
  12. WinApi学习笔记-内存管理
  13. cdcq原创题--pcr技术
  14. 屏幕录制(Giphy Capture)并导出Gif动图
  15. 万彩办公大师 (一个好的 办公工具,集合了文件转换 的工具)--工具推荐
  16. cocos creator实现读取白鹭movieClip组件(尝试)
  17. [INFO1110课件讲解 一] USYD悉尼大学INFO1110 ED lessons Week1 课件 作业 assignment讲解
  18. Go 调用 Java 方案和性能优化分享
  19. 信管师培训之第十一节课作业(法律法规+标准规范+职业道德)
  20. 1001 hzy 和zsl 的生存挑战

热门文章

  1. C语言去除字符串空格
  2. 每次获取不同的图片按顺序从1-xxx
  3. Shiro入门视频课程——笔记(一)
  4. Gradle2.0用户指南翻译——第二章. 概述
  5. O2O、C2C、B2B、B2C的区别
  6. Linq-Order By操作
  7. makefile phony
  8. vista中安装语言包出错解决
  9. php 快速排序函数,PHP实现快速排序算法的三种方法
  10. python词频统计西游记实验报告_Python文本统计功能之西游记用字统计操作示例