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 不可以用[]