find函数
find用在容器中更加普遍,而algorithm中其实find函数只是一种
C++find函数原型:
1 |
|
- 其中,find()算法的前两个参数都是某个容器的迭代器,用于指定查找的起始位置和终止位置;第三个参数就是要查找的内容,它的数据类型跟容器中数据的类型相同。这里需要注意的是,find()算法会利用“==”操作符将这里的目标内容跟容器中的数据元素进行相等比较,以确定某个元素是否符合条件,所以,这里的数据类型必须支持“==”操作符进行相等比较。对于基本数据类型而言,它们已经天然支持无需我们操心,如果是自定义的数据类型,则需要重载“==”操作符以支持相等比较。
各个容器自己实现的成员函数
- vector没有实现find函数,除此之外,常见容器都实现了自己的find函数,如set,map,string
- String是这一种顺序存储结构,其find函数返回的是下标索引。set,map,multiset,multimap都不是顺序索引的数据结构,所以返回的是迭代器。
- 为什么返回的不是索引下标?这是因为索引下标是在数组这种连续存储的数据结构里面常见的,是一种顺序索引;而很多数据结构的存储并非连续的,不能实现顺序索引,为了兼顾所有的数据结构,所以返回的仅仅是指针或是迭代器。
如果元素不在
- 对于返回迭代器的查找,通过判断find(a.begin(),a.end(),value)==a.end(),来判断元素是否存在
- 对于string,通过a.find(val)==string::npos判断
std::map::find
返回值
指向键等于 key 的元素的迭代器。若找不到这种元素,则返回尾后(见 end() )迭代器。