【问题标题】:stl algorithm in class课堂上的stl算法
【发布时间】:2009-04-20 16:26:55
【问题描述】:

有没有办法在对象容器中使用像 find() 和 find_if() 这样的 stl 算法? 例如:使用 find() 在 Alfhabetic 类的向量中查找名称为“abc”的元素。

【问题讨论】:

    标签: c++ stl


    【解决方案1】:

    您可以定义一个比较谓词(函子)。这是一个通用的实现:

    struct AlphabeticNameComp
    {
       AlphabeticNameComp( const std::string& toCompare)
          : toCompare_( toCompare) { }
    
       bool operator()( const Alphabetic& obj) const
       {
           return toCompare_ == obj.name();
       }
    
    private:
       const std::string toCompare_;
    };
    

    在字母元素的向量中

    std::vector< Alphabetic> vect;
    

    您可以运行如下搜索:

    std::find_if( vect.begin(), vect.end(), AlphabeticNameComp( "abc"));
    

    【讨论】:

      【解决方案2】:

      您可以为类Alfhabetic 定义一个operator==(),它只匹配数据成员abc

      类似的东西:

      bool operator==(const Alfhabetic& a, const Alfhabetic& b)
      {
          return (a.abc == b.abc);
      }
      

      然后找到一个Alfhabetic 实例,该实例使用abc 作为您想要的值进行初始化。

      【讨论】:

        猜你喜欢
        • 2019-01-03
        • 2016-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多