C++ Primer笔记7_STL之关联容器

关联容器

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

关联容器最常见的是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——此容器类型的关键字类型

mapped_type——每个关键字关联的类型;只适用于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之关联容器

时间: 2024-10-25 05:40:29

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

0717-----C++Primer听课笔记----------STL之关联容器

1.Map 1.1 map<K, V>是一种pair的容器,pair的种类是pair<K, V>.map采用下标访问一个已存在的key, 会更新value,访问map中不存在的元素时,会增加一个新的键值对.map中的元素按照key进行从小到大排列.map的底层实现是采用二叉树,一般是使用红黑树. #include <iostream> #include <string> #include <map> using namespace std; /*

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

关联容器操作(2) map的下标操作 map的下标操作 map和unordered_map容器提供了下标运算符合一个对应的at函数 对于一个map使用下标操作,其行为与数组或vector上的下标操作很不相同: 使用一个不再容器中的关键字作为下标,会添加一个此关键字的元素到map中 map和unordered_map的下标操作 c[k] 返回关键字为k的元素,如果关键字k不再c中,添加一个关键字为k的元素,对其进行值初始化 c.at(k) 访问关键字为k的元素,带参数检测,如果k不再c重那么返回一

【足迹C++primer】37、关联容器概述

关联容器概述 关联容器不支持顺序容器的位置操作,如push_back或push_front 也不支持构造函数或插入操作这些接受一个元素值和一个数量值的操作. 定义关联容器 这里注意哦,我这是一个函数,里面关联容器map是包含在头文件map中的!!! 还有就是set是包含在头文件set中的,string是包含在头文件string中的!!! //关联容器初始化 void fun1() { map<string, size_t> word_count; //空容器 //列表初始化 set<st

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

关联容器操作 关联容器中还定义了三个类型,如下: set<string>::value_type v1; //这个v1是string类型 set<string>::key_type v2; //这个v2是string类型 map<string, int>::value_type v3; //v3是pair类型pair<const string, int> map<string, int>::key_type v4; //v4是string类型 m

C++ Primer笔记5_STL之顺序容器

1.STL(Standard Template Library) 标准模板库.从根本上说,STL是一些"容器"的集合,这些"容器"有list, vector,set,map等,STL也是算法和其它一些组件的集合.这里的"容器"和算法的集合指的是世界上很多聪明人很多年的杰作.每一个C++程序员都应该好好学习STL.大体上包括container(容器).algorithm(算法)和iterator(迭代器),容器和算法通过迭代器可以进行无缝连接. 2

C++ primer笔记——第九章 顺序容器

顺序容器的元素按照其位置存储和访问.除了顺序容器之外,标准库还提供了几种关联容器,其元素按照键(key)排序.每组容器都提供一组不同的时间和功能的折中方案.顺序容器根据位置来存储和访问元素,元素的排列次序与元素值无关,而是由元素添加到容器的顺序决定.标准库定义了三种顺序容器:vector.list.dequeue.他们的差别在于元素访问的方式以及添加和删除元素相关操作的运行代价.标准库还提供了三种适配器.适配器是根据原始的容器类型所提供的操作,通过定义新的操作接口来适应基础的容器类型.顺序容器适

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

本文介绍C++关联容器综合应用:TextQuery小程序(源自C++ Primer). 关于关联容器的概念及介绍,请参考园子里这篇博文:http://www.cnblogs.com/cy568searchx/archive/2012/10/08/2715306.html 1 #include<iostream> 2 #include<fstream> 3 #include<sstream> 4 #include<string> 5 #include<m

c++ primer(第五版)学习笔记及习题答案代码版(第十一章)关联容器

笔记较为零散,都是自己不熟悉的知识点. 习题答案至于一个.cc 中,包含Chapter7.h头文件,读入文件包括./test ./rules .需要演示某一题直接修改 #define NUM****, 如运行11.23题为#define NUM1123: chapter 11 1.  关联容器不支持顺序容器的位置相关的操作,例如push_front或push_back.原因是关联容器中元素是根据关键字存储的,这些操作对 关联容器没有意义.而且关联容器也不支持构造函数或插入操作这些接收一个元素值和

《C++primer》v5 第11章 关联容器 读书笔记 习题答案

11.1 map是关联容器,vector是顺序容器 11.2 略 11.3 int main() { map<string,int> word; string s; while(cin>>s) word[s]++; for(auto i:word) cout<<i.first<<" "<<i.second<<endl; return 0; } 11.4 void convers(string &s) { s