关联容器

主要是map和set两者,而且两者都是不支持元素出现重复的,要支持的话应该是用multimap的关键字完成,然后默认情况下map和set都是有序的存储的!需要使用指定的非顺序的才可以。下面是一些关联容器的类型列表

  • map 保存为key-value的形式
  • set 关键字就是值,只是保存关键字,默认情况下不允许元素重复
  • multimap 关键字可以重复的key-value的形式即map
  • multiset 关键字可以重复的set
  • unordered_map 用哈希函数组织的map
  • unordered_set 用哈希函数组织的set
  • unordered_mutimap
  • unordered_multiset
  • 关键字重合的就是上面的性质的全部叠加,全部都有的性质包含!
map<string, size_t> word_count;
set<string> exclude = {"a", "b", "C"};
string word;
while(cin>>word){
	if(exclude.find(word) == exclude.end()) {
		++ word_count[word];
	}
}
//set中的find函数当没有找到对应的元素的时候返回的是最后的迭代器
//只要记得很多函数都是返回迭代器的

set的初始化之中,对应可以使用列表初始化的方式,也可以使用括号的方式进行初始化,其中传递一个容器的值,但是其中的值必须是满足类型相同的时候才可以保证赋值成功!

其中使用的正常的常见的数据类型的时候,直接定义对应的元素即可!因为基本的数据类型是可以直接比较对应的大小的,但是如何是自己定义则需要去完成对应的元素是来完成定义!

map的数据内容是pair的数据类型的!简单介绍一下pair的数据类型!

#include <unility> //首先要包含这个头文件
pair<string, string> anon;
pair<string, size_t>word_count;
pair<string, vector<int>>line; 
pair<T1, T2> p;
pair<T1, T2> p(v1, v2);
pair<T1, T2> p = {v1, v2};
pair<string, string> p;
p = make_pair("z", "z");
cout <<  p.first << p.second << endl;
p1 == p2;
p1 != p2;
//是两种类型的,分别的需要两个来完成!

map中的关键字的值是不可以改变的,set的值也是不可以改变的!对应的值定义为const的值!因为其中的容器一般都是const定义的,所以一般不会使用其中的泛型算法来完成对应的算法设置!但是可以使用find的方法来完成对应的查找!

set<int> set2;
set2.insert(ivec.begin(), ivec.end());
set2.insert({1, 2, 3, 4, 5});
//注意其中的()、{}两种!
vector<int> vec = {1,2,3,4};
vector<int>::iterator it = vec.begin();
auto it1 = vec.begin();//可以使用auto的方式完成实现!
cout << *it << endl;
//insert中可以接受两个版本的数据初始化,一个是一对迭代器,
//一个对用的初始化列表,记住其中的类型必须是pair的!

不可以对其中的multimap和unordered_multimap的两者定义的完成对应的下标操作!因为每个元素对应的有几个不同的取值的!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值