C++中的vector&find_if

vector & find_if

看到有人問有個名為C的struct如下

code:

struct C
{
   int v1;
   int v2;
};





應用在vector中式宣告成vector cv;



如果要搜尋內部元素時該怎麼做??

一般解法通常是用for()迴圈作線行搜尋,其實這樣滿直覺也滿簡單的。



這裡提供另一種簡易解法....

find_if()的第三個參數提供判斷式的傳入,但是很可惜,只能傳入一個參數。

而且傳入的是*iterator的型別,而非比對樣本值。



例如這個cv裡的物件的v1,v2依序為

v1 v2

1 100

2 52

3 25

4 75

5 84

6 33



那我們要找v2=75時的物件該如何做?

1.functor point

code:

bool Cfind75(const C& obj)
{
        return obj.v2==75;
}





2.functor

code:

class Cfind75{
       public:
          bool operator()(const C& obj)
          {
               return obj.v2==75;
          }
};





可是這樣要比較值就被寫死了啊!!

沒錯....所以這時候template就派上用場了....

所以我們改寫

code:

template<int n>
class CComp{
    public:
        bool operator()(const C& lhs)
        {
            return (lhs.v2==n);
        }
};





如何使用呢??很簡單....

code:

vector<C>::iterator cviter = 
        find_if(cv.begin(),cv.end(),CComp<75>());


則cviter就是傳回cv中C型別物件的v2值為75的位置。

--

很簡單的小應用,也沒啥大學問。但是對STL不熟的往往都會忽略。

1 #include <iostream>
 2 #include <algorithm>
 3 #include <vector>
 4 #include <cstdlib>
 5 using namespace std;
 6 struct C
 7 {
 8    C():v1(0),v2(0){}
 9    C(const int& val1,const int& val2):v1(val1),v2(val2){}
10    C operator()(const int& val1,const int& val2)
11    {
12       v1=val1;
13       v2=val2;
14       return *this;
15    }
16    ~C(){}
17    int v1;
18    int v2;
19 };
20 template<int n>
21 class CComp{
22     public:
23         bool operator()(const C& lhs)
24         {
25             return (lhs.v2==n);
26         }
27 };
28 int main(int argc, char *argv[])
29 {
30     vector<C> cv;
31     C val;
32     cv.push_back(val(1,100));
33     cv.push_back(val(2,52));
34     cv.push_back(val(3,25));
35     cv.push_back(val(4,75));
36     cv.push_back(val(5,84));
37     cv.push_back(val(6,33));
38     
39     vector<C>::iterator cviter = 
40         find_if(cv.begin(),cv.end(),CComp<75>());
41     cout<<cviter->v1<<"  "<<cviter->v2<<endl;
42     cout<<endl;
43     
44     system("PAUSE");    
45     return 0;
46 }

原文链接: https://www.cnblogs.com/zjoch/p/5738300.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/238098

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午5:39
下一篇 2023年2月13日 下午5:40

相关推荐