zoukankan      html  css  js  c++  java
  • STL(1)——查找函数find的使用

    使用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过程中,如果有错误的地方,还请各位指正,谢谢!

  • 相关阅读:
    Spring@Profile注解
    day 32 子进程的开启 及其用法
    day 31 udp 协议SOCK_DGRAM
    day 30 客户端获取cmd 命令的步骤
    day 29 socket 理论
    day 29 socket 初级版
    有关 组合 继承
    day 27 多态 接口 类方法 静态方法 hashlib 摘要算法模块
    新式类和经典类的区别
    day 28 hasattr getattr serattr delattr 和带__内置__ 类的内置方法
  • 原文地址:https://www.cnblogs.com/Frandy/p/STL_Find_List.html
Copyright © 2011-2022 走看看