c++/oop---STL find/ 函数对象 /关联容器/set和map

find

template <class InIt,class T>
InIt find (InIt first, InIt last ,const T& val)
   

在[first,last) 按顺序查找和val相等的元素,如果找到就返回迭代器,否则就返回end

STL中的大小比较通过 < 实现

最好将 < 重载为全局函数,否则可能会出错

 

如果一个类将 () 运算符重载为成员函数,则这个类就称为函数对象类,这个类的对象是函数对象

可以认为能够将这个类的对象当成一个函数来使用

()是目数不限的运算符,重载为成员函数的时候有多少参数都可以。

 

关联容器

关联容器内部的元素是排好序的,有一下四种:

set

multiset

map

multimap

不可以修改 set/multiset 容器中元素的值,如果要修改,则应该先删除再加入。

同理也不可以修改 map/multimap 容器中的元素的关键字

 

前置知识: pair 类模板

函数 make_pair (x,y) 生成一个 pair 类对象

 

multiset

成员函数

iterator find (const T & val)

iterator insert(const T & val)

int count(const T &val)

iterator lower_bound(const T & val )

查找最大的位置 it 使得 [begin(),it) 中所有元素都比 val 小

iterator upper_bound(const t & val)

查找最小位置 it 使得 [it,end()) 中所有元素都比 val 大

 

用 erase 成员函数删除迭代器 it 指向的值以后,it 立即失效,++it 没有意义

--it 使得it < s.begin() 时,it 立即失效,++it 没有意义

 

multimap

template<class Key, class T,class Pred = less <key> >
class multimap{
    typedef pair<const Key,T> value_type
}

 

iterator find (const Key & val)

iterator insert(pair<Key,T> const & p) 

将 pair 对象 p 插入容器并返回其迭代器

int count(const Key &val)

iterator lower_bound(const Key & val )

查找最大的位置 it 使得 [begin(),it) 中所有元素的 Key 都比 val 小

iterator upper_bound(const t & val)

查找最小位置 it 使得 [it,end()) 中所有元素的 Key 都比 val 大

 

注意 multimap 不可以用[]

 

posted @ 2022-04-09 19:22  liankewei123456  阅读(27)  评论(0编辑  收藏  举报