• c++/oopSTL 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 不可以用[]

  • 相关阅读:
    无锁队列的实现
    C/C++语言中闭包的探究及比较
    Linus:利用二级指针删除单向链表
    Unix考古记:一个“遗失”的shell
    “C++的数组不支持多态”?
    Alan Cox:单向链表中prev指针的妙用
    二叉树迭代器算法
    C语言全局变量那些事儿
    数据即代码:元驱动编程
    C++模板”>>”编译问题与词法消歧设计
  • 原文地址:https://www.cnblogs.com/liankewei/p/16123134.html
Copyright © 2020-2023  润新知