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

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;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116520.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • leetcode 颜色分类_LEETCODE

    leetcode 颜色分类_LEETCODE给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。示例 1:输入:nums = [2,0,2,1,1,0]输出:[0,0,1,1,2,2]示例 2:输入:nums = [2,0,1]输出:[0,1,2]示例 3:输入:nums = [0]输出:[0]示例 4:输入:nums = [1]输出:[1] 提示:n == num

    2022年8月9日
    10
  • 解决Mplayer播放srt、sub字幕乱码的方法

    解决Mplayer播放srt、sub字幕乱码的方法网上看到解决Mplayer播放srt、sub字幕乱码的方法,试了下,srt可以,效果也不错,虽然字体有点大。sub还没有试,可能还是不行,记得以前摆弄过。1.srt字幕要设置正确编码才行右键菜单—-属性设置—–字幕和OSD,在字幕一栏选择编码:简体中文(CP936),再在下面的多选框中选上”unicode字幕”这项.再在属性设置—–字体下编码选unico

    2022年7月11日
    29
  • 前端之路:bootstrap 时间日期日历控件(datetimepicker)

    前端之路:bootstrap 时间日期日历控件(datetimepicker)Bootstrap datetimepicker控件的使用1.支持日期选择,格式设定2.支持时间选择3.支持时间段选择控制4.支持中文涉及的样式及js:云加速外联即可。(moment-with-locales.js 这个得在datatimpicker.min.js之前。可以网上百度这个文件。我没找到这个cdn)&lt;linkhref="https://cdn.b…

    2025年7月26日
    5
  • 商品分类递归查询Tree结构展示

    商品分类递归查询Tree结构展示

    2021年7月11日
    63
  • 吃火锅,秒懂云计算

    吃火锅,秒懂云计算

    2022年4月3日
    40
  • 阿里云服务器使用freessl配置免费证书Nginx

    阿里云服务器使用freessl配置免费证书Nginx环境:阿里云服务器购买的域名服务器:linux+nginxSSL证书:FreeSSL申请的免费证书步骤1、申请ssl证书具体参考二哥的“五分钟搞定HTTPS配置,二哥手把手教”https://blog.csdn.net/qing_gee/article/details/90031376博客,这位大佬写的很详细了2、配置阿里云服务器2.1、上传证书登陆阿里云控制台,搜索“ssl证书应用安全”,上传原有证书,注意一定要将证书转换为pem格式2.2、开启服务器443.

    2025年6月11日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号