C++中的vector&find_if
看到有人問有個名為C的struct如下
code:
struct C
{
int v1;
int v2;
};
應用在vector中式宣告成vector<C> 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不熟的往往都會忽略。
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstdlib>
using namespace std;
struct C
{
C():v1(),v2(){}
C(const int& val1,const int& val2):v1(val1),v2(val2){}
C operator()(const int& val1,const int& val2)
{
v1=val1;
v2=val2;
return *this;
}
~C(){}
int v1;
int v2;
};
template<int n>
class CComp{
public:
bool operator()(const C& lhs)
{
return (lhs.v2==n);
}
};
int main(int argc, char *argv[])
{
vector<C> cv;
C val;
cv.push_back(val(,));
cv.push_back(val(,));
cv.push_back(val(,));
cv.push_back(val(,));
cv.push_back(val(,));
cv.push_back(val(,)); vector<C>::iterator cviter =
find_if(cv.begin(),cv.end(),CComp<>());
cout<<cviter->v1<<" "<<cviter->v2<<endl;
cout<<endl; system("PAUSE");
return ;
}
C++中的vector&find_if的更多相关文章
- 【转】java.util.vector中的vector的详细用法
[转]java.util.vector中的vector的详细用法 ArrayList会比Vector快,他是非同步的,如果设计涉及到多线程,还是用Vector比较好一些 import java.uti ...
- 转:用STL中的vector动态开辟二维数组
用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int mai ...
- STL中的Vector相关用法
STL中的Vector相关用法 标准库vector类型使用需要的头文件:#include <vector>. vector 是一个类模板,不是一种数据类型,vector<int> ...
- (转)C++ STL中的vector的内存分配与释放
C++ STL中的vector的内存分配与释放http://www.cnblogs.com/biyeymyhjob/archive/2012/09/12/2674004.html 1.vector的内 ...
- C++STL中的vector的简单实用
[原创] 使用C++STL中的vector, #include <stdio.h> #include<stdlib.h> #include<vector> usin ...
- STL中的vector实现邻接表
/* STL中的vector实现邻接表 2014-4-2 08:28:45 */ #include <iostream> #include <vector> #include ...
- 数据结构与算法(3)- C++ STL与java se中的vector
声明:虽然本系列博客与具体的编程语言无关.但是本文作者对c++相对比较熟悉,其次是java,所以难免会有视角上的偏差.举例也大多是和这两门语言相关. 上一篇博客概念性的介绍了vector,我们有了大致 ...
- 实战c++中的vector系列--再谈vector的insert()方法(都是make_move_iterator惹的祸)
之前说过了关于vector的insert()方法,把vector B的元素插入到vector A中.vector A中的结果我们可想而知,可是vector B中的元素还会怎样? 看看之前写过的程序: ...
- 实战c++中的vector系列--vector应用之STL的find、find_if、find_end、find_first_of、find_if_not(C++11)
使用vector容器,即避免不了进行查找,所以今天就罗列一些stl的find算法应用于vector中. find() Returns an iterator to the first element ...
随机推荐
- php毫秒时间戳
2014年5月23日 17:46:04 凡事还是得靠自己呀,网上太多坑 如果你的机器是 32位 的可以看这个: list($usec, $sec) = explode(' ', microtime() ...
- 微信小程序《沈航二手书》
微信小程序<沈航二手书> 0x01. 利益相关者 利益相关者:是指与客户有一定利益关系的个人或组织群体,可能是客户内部的(如雇员),也可能是客户外部的(如供应商或压力群体). 根据相关利 ...
- .NetCore SkyWalking APM实现服务器监控环境安装及基础使用
下载Java 8 SDK wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fw ...
- 【Codechef】BB-Billboards
题解 传说中的--半标准杨表(行单调不增,列单调减) 如果N能整除M,我们把序列分成\(\frac{N}{M}\)段 然后里面要填K个1,显然我每一段必须填K个1,且可以构造出合法的序列,所以最少要填 ...
- Codeforces 311B Cats Transport 斜率优化dp
Cats Transport 出发时间居然能是负的,我服了... 卡了我十几次, 我一直以为斜率优化写搓了. 我们能得出dp方程式 dp[ i ][ j ] = min(dp[ k ][ j - 1 ...
- ZooKeeper与Eureka对比
简介 Eureka [ jʊ'rikə ]本身是Netflix开源的一款提供服务注册和发现的产品,并且提供了相应的Java封装.在它的实现中,节点之间相互平等,部分注册中心的节点挂掉也不会对集群造成影 ...
- 007.LVM查看命令
一 PV查看 [root@kauai ~]# pvdisplay #显示有关物理卷的信息 --- Physical volume --- PV Name /dev/sdb5 #PV名称 VG Name ...
- C#并行编程(5):需要知道的异步
异步与并行的联系 大家知道"并行"是利用CPU的多个核心或者多个CPU同时执行不同的任务,我们不关心这些任务之间的依赖关系. 但是在我们实际的业务中,很多任务之间是相互影响的,比如 ...
- springmvc+swagger2
一.swagger2依赖 <!--swagger--> <dependency> <groupId>io.springfox</groupId> < ...
- vue-video-player的使用总结
由于公司的项目是网上教育的,像网易云课堂那种教育网站,因而会有很多课程需要在线观看的,所以视频插件是必不可少的. 由于我用vue开发项目,所以找视频插件也找和vue贴近的.最后选择了vue-video ...