C++ Primer笔记7_STL之关联容器
关联容器
与顺序容器不同,关联容器的元素是按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之关联容器的更多相关文章
- C++ Primer : 第十一章 : 关联容器之关联容器的迭代器和操作
关联容器的操作 除了和顺序容器定义的类型之外,关联容器还定义了一下几种类型: 关联容器额外的类型别名 key_type 此容器类型的关键字类型 mapped_type 每个关键字关联的类型, ...
- C++ Primer : 第十一章 : 关联容器之概述、有序关联容器关键字要求和pair类型
标准库定义了两种主要的关联容器:map和set map中的元素时一些关键字-值(key-value)对,关键字起到索引的作用,值则表示与索引相关的数据.set中每个元素只包含一个关键字,可以完成高效的 ...
- C++ Primer 随笔 Chapter 10 关联容器
1.关联容器的类型:map(键-值对的集合,可理解为关联数组), set(单纯的键的集合), multimap(一个键对应多个值,键唯一), multiset(相同键可以是多个). 2.pair类型提 ...
- C++学习笔记54:关联容器,函数对象
关联容器的特点 1.每个关联容器都有一个键(key) 2.可以根据键高效查找元素 集合set 集合用来存储一组无重复的元素,由于集合的元素本身是有序的,可以高效地查找元素,也可以方便地指定大小范围的元 ...
- [C++ Primer] : 第11章: 关联容器
目录 使用关联容器 关联容器概述 关联容器操作 无序容器 使用关联容器 关联容器与顺序容器有着根本的不同: 关联容器中的元素是按关键字来保存和访问的, 按顺序容器中的元素是按它们在容器中的位置来顺序保 ...
- 【足迹C++primer】38、关联容器操作(2)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/cutter_point/article/details/35244805 关联容器操作(2) map ...
- C++ Primer : 第十一章 : 关联容器示例: 一个单词转换的map
单词转换就是:将一些缩写的单词转换为实际的文本.第一个文件保存的是转换的规则,而第二个文件保存的是要转换的文本. 假设单词转换的规则的文件如下: brb be right back k okay? y ...
- C++关联容器综合应用:TextQuery小程序
本文介绍C++关联容器综合应用:TextQuery小程序(源自C++ Primer). 关于关联容器的概念及介绍,请参考园子里这篇博文:http://www.cnblogs.com/cy568sear ...
- C++ Primer 读书笔记:第10章 关联容器
第10章 关联容器 引: map set multimap multiset 1.pair类型 pair<string, int> anon anon.first, anon.second ...
随机推荐
- 【Tips】Endnote导入IEEE Xplore文献方法《转载》
1. 在IEEE XPlore中点击“Download Citation”: 2. 选中“Citation & Abstract”和“EndNote,Procite,RefMan”两个选项: ...
- MYSQL 语法大全自己总结的
mysql语法大全 --------数据链接---------------------数据库服务启动net start mysql --关闭服务net stop mysql --登录 -u,-p后面不 ...
- BCM wifi驱动学习
BCMwifi驱动学习 一.wifi详解1 1.代码路径:Z:\home\stonechen\svn\TD550_X\TD550\3rdparty\wifi\BCM43362\special\bcmd ...
- cell中button怎么得到对应cell的indexpath 以及关于UITableViewCellContentView的问题
============================================================ 博文原创,转载请声明出处 电子咖啡-专注于移动互联网 ============ ...
- Mac OS设置rootpassword
不知怎么忘记mac os系统的rootpassword了 方法一: 首先,启动机器,启动时按住Apple和S键,以单用户模式(single user mode)进入系统.输入:mount -uw / ...
- 用 managedQuery() 时须要注意的一个陷阱
Activity 里面提供了一个 managedQuery() 方法,依照 Android SDK 里面的说明,"the activity will manage its lifecycle ...
- struts2由<s:tree>要么dtree小工具 建立树
一个 .<s:tree>方法: 1.引入新的标签: <%@ taglib prefix="sd" uri="/struts-dojo-tags" ...
- NET Core全新的配置管理
NET Core全新的配置管理[共9篇] 提到“配置”二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来 ...
- git版本号回滚
先说今天遇到的问题,看到一个config.php的配置文件一直在改动的状态下,可是和远程的config.php是不一致的,我不须要提交它,可是看它在 modified的状态下,非常不爽.想删除它.gi ...
- 4.锁--无锁编程以及CAS
无锁编程以及CAS 无锁编程 / lock-free / 非堵塞同步 无锁编程,即不使用锁的情况下实现多线程之间的变量同步,也就是在没有线程被堵塞的情况下实现变量的同步,所以也叫非堵塞同步(Non-b ...