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