C++容器之 vector map set查找元素

前面两篇基本上讲解容器的增加删除,其实现实世界中对数据的查找才是最大的需求,下面主要围绕着容器的查找来讲解

首先,由于vector没有实现find()方法,只能使用algorithm提供的find()方法。所以,直接在vector查找节介绍algorithm的find使用方法。

目录
[toc]

1、vector查找

vector自己并没有实现find方法,只能使用algortihm提供的find方法。

iterator find(iterator first, iterator last, const T& val) // #include
方法可用于数组、指针和STL容器 查找的区间是[first,last),且若查找成功,返回第一个查找到,否则返回last.

2、map查找

map的查找

  • map和vector相比,map有自己的find()方法,注意不是algorithm提供的。
    iterator map::find( key )

  • map和vector相比,map还有自己的count()方法
    size_type map::count(key) 返回值是:键为key的个数

  • 使用algorithm提供的count函数
    int count(iterator first, iterator last, value)

  • 使用algorithm的find()函数
    iterator find(iterator first, iterator end, find_value);

其中,map的find_value不像vector那样直接输入基本类型,也不可输入pair数据查找,使用方法:
map<int,string>::value_type(1,"LiLei");

3、set查找

自带的两个和map相同

  • size_type count(value)
    返回set对象内元素为value的元素个数(0,1)

  • iterator find(value)
    返回value所在的位置,找不到返回end()
    还可使用algorithm里面的count和find,参照map说明。

代码

#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
typedef set<int>::iterator ITER;
int main(int argc, char *argv[])
{
    set<int> s1;
    //3.插入方式1
    pair<set<int>::iterator,bool> p = s1.insert(0);
    if(p.second)
        cout << "insert success!\n";
    s1.insert(1);
    s1.insert(2);
    //2.插入方式2
    set<int>::iterator iter = s1.begin();
    ITER iterpos = s1.insert(iter,4);
    cout << *iterpos << endl;
    if(iterpos == s1.end())
        cout << "Insert Fail\n";
    //3.插入方式3
    int a[] = {3 ,4, 5};
    s1.insert(a,a+3);
    for_each(s1.begin(),s1.end(),[](int i){
        cout << i << " "; //lambda遍历
    });
    cout << endl;
    /*
    //删除
    s1.erase(5);
    iter = s1.begin();
    s1.erase(iter);
    cout << "\n old set begin()" <<*iter <<  endl;
    for_each(s1.begin(),s1.end(),[](int i){
        cout << i << " ";
    });
    cout << endl;
    //遍历
    //不能使用数组的方式遍历
    */

    //查找
    ITER nf = find(s1.begin(),s1.end(),2);
    int nc = count(s1.begin(),s1.end(),2);
    if(nf != s1.end())
        cout << "algorithm find ok! nc="<< nc << endl;
    ITER mf = s1.find(3); //s1.find(key)
    int mc = s1.count(3); //s1.count(key)
    if(mf != s1.end())
        cout << "set find ok! mf="<< *mf<< endl;
    return 0;
}
>>>insert success!
4
0 1 2 3 4 5
algorithm find ok! nc=1
set find ok! mf=3
  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值