关联容器

与顺序容器不同,关联容器的元素是按keyword来訪问和保存的。而顺序容器中的元素是按他们在容器中的位置来顺序保存的。

关联容器最常见的是map、set、multimap、multiset

map的元素以键-值【key-value】对的形式组织:键用作元素在map中的索引,而值则表示所存储和读取的数据。

set仅包括一个键。并有效的支持关于某个键是否存在的查询。

pair类型

首先介绍下pair,pair定义在utility头文件里,一个pair保存两个数据成员,类似容器,pair是一个用来生成特点类型的模板。

当创建一个pair时,我们必须提供两个类型名。

pair<string, string> a; //保存两个string

pair<string, int> b; //一个保存string,一个保存int

能够使用make_pair来构建一个pair

#include <iostream>
#include <utility> using namespace std; int main()
{
typedef pair<string, size_t> PS;
PS p("hello", 10);//等价于pair<string, size_t> p("hello", 10); PS p1 = make_pair("SCOTT", 20);//make_pair(v1, v2); 以v1、v2来构建一个pair cout << p.first << endl;
cout << p.second << endl; cout << p1.first << endl;
cout << p1.second << endl; return 0;
}

map对象

定义map对象:

map<string, int> p;//定义一个空map
map<K, V>m;//——创建一个名为m的空对象,键和值类型分别为K和V
map<K, V>m(m2);//——m是m2的副本。注意K和V的值要同样
map<K, V>m(b,e);//——创建map类型的对象m,存储迭代器b和e标记的范围内全部元素的副本。

关联容器操作:

key_type——此容器类型的keyword类型

mapped_type——每一个keyword关联的类型;仅仅适用于map

value_type——对于set。与key_value同样。对于map。为pair类型:pair<const key_type, mapped_type>

#include <iostream>
#include <map>
using namespace std; int main()
{
map<string, int> p;
p.insert(make_pair("Hello", 20));
map<string, int>::iterator i = p.begin(); map<string, int>::key_type first = i->first;//map对象自己定义了key_type与mapped_type两个类型
map<string, int>::mapped_type second = i->second; cout << first << endl;
cout << second << endl; while(i!=p.end())
{
cout << i->first << " " << i->second << endl;
++i;
} return 0;
}

给map加入元素:

1、能够使用insert成员实现;

2、或者先通过下标操作符获取元素,然后给获取的元素赋值。

使用下标訪问map与使用下标訪问数组或vector的行为截然不同: 用下标訪问不存在的元素将导致在map容器中加入一个新元素,它的键即为该下标值。

查找与统计map中的元素:

1、使用m.count(k); 统计m中k出现的次数

2、使用m.find(k);查找以k为索引的元素。假设存在返回指向该元素的迭代器,否则返回末端迭代器

统计单词出现的次数:

#include <iostream>
#include <map> using namespace std; int main()
{
string s;
map<string, int> wordCnt;
map<string, int>::iterator i; while(cin >> s)
{
wordCnt[s]++;
} for(i = wordCnt.begin(); i!=wordCnt.end(); ++i)
{
cout << i->first << " " << i->second << endl;
} return 0;
}

C++ Primer笔记7_STL之关联容器的更多相关文章

  1. C++ Primer : 第十一章 : 关联容器之关联容器的迭代器和操作

    关联容器的操作 除了和顺序容器定义的类型之外,关联容器还定义了一下几种类型: 关联容器额外的类型别名  key_type    此容器类型的关键字类型 mapped_type  每个关键字关联的类型, ...

  2. C++ Primer : 第十一章 : 关联容器之概述、有序关联容器关键字要求和pair类型

    标准库定义了两种主要的关联容器:map和set map中的元素时一些关键字-值(key-value)对,关键字起到索引的作用,值则表示与索引相关的数据.set中每个元素只包含一个关键字,可以完成高效的 ...

  3. C++ Primer 随笔 Chapter 10 关联容器

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

  4. C++学习笔记54:关联容器,函数对象

    关联容器的特点 1.每个关联容器都有一个键(key) 2.可以根据键高效查找元素 集合set 集合用来存储一组无重复的元素,由于集合的元素本身是有序的,可以高效地查找元素,也可以方便地指定大小范围的元 ...

  5. [C++ Primer] : 第11章: 关联容器

    目录 使用关联容器 关联容器概述 关联容器操作 无序容器 使用关联容器 关联容器与顺序容器有着根本的不同: 关联容器中的元素是按关键字来保存和访问的, 按顺序容器中的元素是按它们在容器中的位置来顺序保 ...

  6. 【足迹C++primer】38、关联容器操作(2)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/cutter_point/article/details/35244805 关联容器操作(2) map ...

  7. C++ Primer : 第十一章 : 关联容器示例: 一个单词转换的map

    单词转换就是:将一些缩写的单词转换为实际的文本.第一个文件保存的是转换的规则,而第二个文件保存的是要转换的文本. 假设单词转换的规则的文件如下: brb be right back k okay? y ...

  8. C++关联容器综合应用:TextQuery小程序

    本文介绍C++关联容器综合应用:TextQuery小程序(源自C++ Primer). 关于关联容器的概念及介绍,请参考园子里这篇博文:http://www.cnblogs.com/cy568sear ...

  9. C++ Primer 读书笔记:第10章 关联容器

    第10章 关联容器 引: map set multimap multiset 1.pair类型 pair<string, int> anon anon.first, anon.second ...

随机推荐

  1. 基于visual Studio2013解决面试题之0409判断一个栈是否另外一个栈的弹出序列

     题目

  2. Linux/ubuntu下的boost库安装

    我一直都没有写博客的习惯,最近正好在研究linux下的开发(目前也只是粗粗的研究),且用到了boost库,就乘此机会写点什么,最起码记录一下我在安装boost的一些步骤,主要给和我一样的linux开发 ...

  3. 创建webservice 用service.xml配置(复杂点的方法)

    用Axis2实现Web Service,虽然可以将POJO类放在axis2/WEB-INF/pojo目录中直接发布成Web Service,这样做不需要进行任何配置,但这些POJO类不能在任何包中.这 ...

  4. hdu4707 Pet

    Pet Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissio ...

  5. (1)前言——(10)jquery项目的历史(History of the jQuery project)

    This book covers the functionality and syntax of jQuery 1.6.x, the latest version at the time of wri ...

  6. HDU 4293 Groups

    模型挺好的dp题,其实这道题就是建一个模型然后就很容易想到递推过程了,我们可以把每个人的描述,存到数组a中,a[l][r]表示左边有l个,到第r个这个人所在一层停止...然后就可以写出转移状态方程了. ...

  7. [置顶] ubuntu 和 win7 远程登陆 + vnc登陆

    ubuntu 和 win7 远程登陆: 第一种(通过win7自带的远程桌面来连接ubuntu) 1. windows7配置 我的电脑->属性->远程设置.-----允许远程连接 2. ub ...

  8. android:改动PagerTabStrip中的背景颜色,标题字体的样式、颜色和图标以及指示条的颜色

    1.改动PagerTabStrip中的背景颜色 我们在布局中直接设置background属性就可以: <android.support.v4.view.ViewPager android:id= ...

  9. App 运营 推广相关

    基本要素 1.定位和产品 2.取个好名字,一目了然+下载冲动 3.设计一个好图标,有感性和直观的认识 4.做好产品的说明.关键字,截图(前1-2行是重点) 5.做市场的排名(相关因素如下)   (1) ...

  10. Lucene.Net 2.3.1开发介绍 —— 四、搜索(二)

    原文:Lucene.Net 2.3.1开发介绍 -- 四.搜索(二) 4.3 表达式用户搜索,只会输入一个或几个词,也可能是一句话.输入的语句是如何变成搜索条件的上一篇已经略有提及. 4.3.1 观察 ...