11.2 关联容器概述

文章目录

    • 定义关联容器
      • 对于map 、set的初始化
      • 初始化multimap和multiset
    • 关键字类型的要求
      • 使用比较函数进行有序关联容器的定义
    • pair类型

关联容器(有序的和无序的)都支持9.2节中介绍的普通容器操作。

关联容器的迭代器都是双向的。

定义关联容器

对于map 、set的初始化

	map<string, int> word_count;  //空map
	set<string> limit2;           //空set
	set<string> limit = { "the","a","an" };//具有初始化的set
	map<string, int> word_count2 = { {"张三",11},{"李四",12},{"王五",13} };//具有初始化的map,注意的是类型需要一一对应

对于map来说,实际上一个元素是{key,value}

初始化multimap和multiset

与map和set相比,multimap和multiset允许多个元素具有相同关键字,其他的是一致的。

关键字类型的要求

对于有序关联容器,关键字类型中必须定义元素比较方法,默认使用"<"运算符。如果自定义操作代替<运算符,必须在关键字类型上定义一个严格弱序。

也即当没有传入顺序要求,则默认对有序关联容器当中的数据进行key或者set的元素<比较,进行排列座次。

严格弱序:假定这种顺序是小于等于,那么对于不同的关键字,不可能互相小于等于或循环小于等于。如果两个关键字都不小于等于另一个,则而这等价,看作同一关键字。

使用比较函数进行有序关联容器的定义

对于没有<操作符的类,可以自定义比较操作,此时在定义有序容器时,自定义操作类型在尖括号中紧跟着元素类型给出

	//注意此处的a b 的类型只能是和有序关联容器中存储的一致。
	bool compID(int a, int b) {
		return a < b;
	};
	multiset<int, decltype(compID)*>student(compID);
	//multisetstudent(&compID); //相当于

pair类型

一个pair保存两个数据成员,是用来生成特定类型的模板。

头文件:

#include

默认构造函数对数据成员进行值初始化
可以提供列表初始化

基本操作:

操作 说明
pair p; p是一个pair,两个类型分别为T1,T2的成员同时进行了值初始化
pair p(v1,v2) p是一个成员类型为T1和T2的pair,v1和v2分别对其first和second进行了初始化
make_pair(v1,v2); 返回用v1,v2初始化的pair。pair类型通过v1,v2推断出来。
p.first 返回p的first(公有)成员
p.second 返回p的second(公有)成员
p1 关系运算符(除了等于和不等于)p2 关系运算符(<、>、<=、>=)按字典序定义:举个例子:判断p1
p1 == p2以及p1 != p2 需要first和second都相等p1才等于p2,剩下即为不等
pair<string, int> process(vector<string>& v) {
	if (!v.empty()) 
	{
		return { v.back(),v.back().size()};
		//早期需要显式构造
		//return pair(v.back(), v.back().size());
		//return make_pair(v.back(), v.back().size());
	}
	else {
		return pair<string, int>();
	}
}

你可能感兴趣的:(C++,c++)