关联容器的使用

关联容器的使用

在这里插入图片描述
map容器的使用

//初始化列表法
	map<string, size_t> word_count = { {"test1",1},{"test2",2},{"test0",0} };
	//直接赋值法
	word_count[string("abc")] = 3;
	word_count[string("defg")] = 4;
	//插值法
	word_count.insert({ string("abc1"), 5});
	word_count.insert(make_pair(string("defg1"), 6));
	word_count.insert(pair<string, int>(string("hijk"), 7));
	for (const auto& w : word_count)
	{
		cout << w.first << " occurs " << w.second << endl;
	}

对应着的代码结果输出如下:map中以key为排序列。及程序中的string类型为排序依据。
在这里插入图片描述

pair类型

在这里插入图片描述

	pair<string, string> p;
	pair<int, string> ptest(3, "test");
	pair<int, string> pstr = { 2,"test2" };
	auto pmake = make_pair(3, "test3");
	auto pf=pmake.first;//pf=3
	auto pse = pmake.second;//pse=test3字符串
	
	auto bCompare = ptest < pstr;//false
	ptest.first = 2;

	bCompare = ptest < pstr;//true

在使用比较运算符时第一个参数相等时则根据第二个参数的结果来进行比较,如果第一个参数不相等为相应的判断结果。

关联容器操作

关联容器额外的类型别名类型别名描述
key_type此容器类型的关键字类型
mapped_type关键字关联的类型:只适用于map
value_type对于set,与key_type相同 ; 对于map,为pair<const key_type,mapped_type>
	set<string>::value_type v1;//v1是一个string
	set<string>::key_type v2;//v2是一个string
	map<string, int>::value_type v3;//v3是一个pair<const string,int>
	map<string, int>::key_type v4;//v4是一个string
	map<string, int>::mapped_type v5;//v5是一个int(只有map类型才定义了mapped_type)
	map<string, int> word_count{ {"test1",1},{"test2",2},{"test3",3} };
	auto map_it = word_count.begin();
	//*map_it是一个指向pair<const string,size_t>对象的引用
	cout << map_it->first << " " << map_it->second;
	//map_it->first = "new key";//错误关键字是const
	++map_it->second;//第一个key:test1 的关联值变为2

set的迭代器是const的

	set<int> iset = { 0,1,2,3,4,5,6,7,8,9 };
	set<int>::iterator set_it = iset.begin();
	//*set_it = 42;error set中的关键字是const只读属性
	cout << *set_it << endl;

在这里插入图片描述在这里插入图片描述

	unordered_map<int, int> iset = { {1,1},{2,2},{3,3} };
	auto te = iset.find(2);
	iset.erase(iset.begin(),te);//容器剩余元素为{2,2}{3,3}

map的下标操作

map和unordered_map容器提供了下标运算符和一个对应的at函数;set类型不支持下标,multimap或unordered_multimap不能进行下标操作。map下标运算接受一个索引(即一个关键字),获取此关键字相关联的值。

map<string, size_t> word_count;
	word_count["Anna"] = 1;
	//在word_count中搜索关键字为Anna的元素未找到
	//将一个新的关键字-值对插入到word_count中。关键字是一个const string,保存Anna。值进行初始化。
	//提取出新插入的元素,并将值1赋予它

下标运算符可能插入一个新元素,仅对非const的map下标操作。使用不在容器中的关键字作为下标,会添加一个具有此关键字的元素到map中。

map和unordered_map的下标操作含义描述
c[k]返回关键字为k的元素;如果k不在c中,添加一个关键字为k的元素,对其值进行初始化
c.at(k)访问关键字为k的元素,带参数检查;若k不在c中,抛出一个out_of_range异常

访问元素在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值