zoukankan      html  css  js  c++  java
  • C++ Primer 随笔 Chapter 10 关联容器

    1.关联容器的类型:map(键-值对的集合,可理解为关联数组), set(单纯的键的集合), multimap(一个键对应多个值,键唯一), multiset(相同键可以是多个)。

    2.pair类型提供的操作:

        a. pair(T1, T2) p1; 创建一个空的pair对象,它的两个元素分别是T1和T2类型,采用值初始化。

        b. pair(T1, T2) p2;创建一个pair对象,它的两个元素分别是T1和T2类型,其中first初始化为v1,second初始化为v2

        c. make_pair(v1,v2);  以v2和v1创建一个新的pair对象

        d. p1 < p2两个pair对象之间的小于运算,先比较第一个再比较第二个

        e. p1 == p2如果两个pair对象first和second成员相等,则这两个对象相等。该运算使用元素的 ==操作符

        f . pq.first :返回p中名为first的公有数据成员,p.second :返回p的名为second的共有数据成员

    3. ,map对象的定义:

        a. map<k, v> m创建一个名为m的空map对象,其键和值的类型分别为k和

        b. map<k, v> m(m2)创建m2的副本,m与m2必须有相同的键值类型

        c. map<k, v> m(b,e)创建map类型的对象m,存储迭代器b和e标记的范围内所有元素的副本。元素类型必须能转换为pair<const k, v>

    4. map定义的类型

        a. map<k,v> :: key_type 在 map容器中,做索引键的类型

        b. map<k,v> :: mapped_type 在map容器中,键所关联的值的类型

        c. map<k,v> :: value_type 一个pair类型,它的first元素具有const map<k,v>::key_type类型,而second元素则为 map<k,v>::mapped_type类型   

    5.给map类型添加元素

        a. 使用下标访问map对象:

          1 map <string , int>  word_count;//empty map
          2 //insert default initialzed element with key Anna;them assign 1 to its value
          3 word_count["Anna"] = 1;

         以上代码将发生以下事情:

            (1)在word_count中查找键为 Anna的元素,没有找到

            (2)将一个新的键值插入到word_count中,他的键是const string类型的对象,保存Anna。而它的值则采用值初始化,这就意味着在本例中值为 0.

            (3)将这个新的键值对插入到word_count中。

            (4)读取新插入的元素,并将它赋值为1。

        b. map::insert的使用

            (1) m.insert(e); e是一个在m上的alue_type类型的值。如果键(e.first)不再m中,则插入一个值为e.second的新元素;如果该键在m中则m保持不变,该函数返回一个

               pair类型对象,包含只想键e.fitst的元素的map迭代器,以及一个bool类型,表示是否插入了该元素.

            (2) m.insert(beg,end) beg和end是标记元素范围的迭代器,其中的元素必须为m.value_type类型的键值对,对于该范围内所有三元素

            (3) m.insert(iter,e) e是一个用在m上的value_type类型的值,如果键不在m中,则创建新元素,并以迭代器iter为起点搜索新元素存储的位置。返回一个迭代器,指           向m中具有给定键的元素

    6.查找并读取map中元素

        a. m.count(k): 返回m中k的出现次数,map中只可能是0或者1

        b. find(k)       : 如果存在则返回迭代器,如果不存在返回超出末端迭代器

    7.从map对象中删除元素

        a. m.erase(k)  : 删除m中键为k的元素,返回size_type类型的值,表示删除元素的个数

        b. merase(p)   :从m中删除迭代器p所指向的元素。p必须指向m中确实存在的元素,而且不能等于m.end。返回oid类型

        c. m.erase(b,e):删除b和e标记的一段元素,返回void

    8.set、multimap、multiset添加、删除和查找操作:

        a. 添加:insert(k) set:重复的只会插入一次,而multimap、multiset会添加多次

        b. 删除:erase(k) set:删除k元素,multimap、multiset可能会删除多个k匹配的元素

        c. 查找:find(),cout()分别返回元素的位置和元素的个数

        d. multimap和multiset特有的

            (1) m.lower_bound(k)返回一个迭代器,指向键不小与k的第一个元素

            (2) m.upper_bound(k)返回一个迭代器,指向键大于k的第一个元素

            (3) m.equal_range(k)返回一个pair类型,pair的first成员等价与lower_bound(k),而second成员则等价于upper_bound(k)成员

  • 相关阅读:
    九度OJ 1010 A+B
    九度OJ 1052 找x
    oracle数据库创建备份与恢复 脚本
    在select标签中添加a标签
    如何在select标签中使用a标签跳转页面
    网站访问不了
    js实现input的赋值
    PHP如何实现百万级数据导出
    互联网产品需求管理杂思2需求收集,互联网营销 狼人:
    做网站用UTF8还是GB2312?,互联网营销 狼人:
  • 原文地址:https://www.cnblogs.com/zhuwbox/p/3320942.html
Copyright © 2011-2022 走看看