欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-21 16:29:30
...

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

首先,由于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