网站开发工程师学什么语言,asp网站 证书,毕业设计做网站简单吗,帮忙建网站的人set与map 一、序列式容器与关联式容器二、pair1、键值对2、作用3、构造函数4、make_pair#xff08;1#xff09;构造函数#xff08;2#xff09;作用 5、代码6、运行结果 三、set1、概念2、代码3、运行结果4、说明 四、multiset1、与set的关系2、代码3、运行结果 五、map… set与map 一、序列式容器与关联式容器二、pair1、键值对2、作用3、构造函数4、make_pair1构造函数2作用 5、代码6、运行结果 三、set1、概念2、代码3、运行结果4、说明 四、multiset1、与set的关系2、代码3、运行结果 五、map1、概念2、代码3、运行结果 六、multimap1、与map的关系2、代码3、运行结果 一、序列式容器与关联式容器
序列式容器和关联式容器都是STL中的容器它们之间主要的区别在于存储内部元素的方式不同。序列式容器按照元素插入的顺序进行存储元素的操作即元素在容器中的位置与其被插入的先后顺序是一致的底层为线性序列的数据结构。例如vector、list和deque等等容器。关联式容器通过比较关键字来对元素进行有序存储而关键字可以是内置类型也可以是自定义类型只要关键字能够进行比较即可。例如set、map、multiset和multimap容器就是树型结构的关联式容器它们使用平衡搜索树红黑树作为其底层结构容器中的元素是一个有序的序列。关联式容器在进行数据检索时它的效率比序列式容器高。
二、pair
1、键值对
用来表示具有一一对应关系的一种结构该结构中一般只包含两个成员变量key和valuekey代表键值value代表与key对应的信息。
2、作用
此类将一对值耦合在一起这些值可能属于不同的类型T1 和 T2。可以通过此类的公共成员first 和second 访问它们耦合在一起的T1和T2类型的两个变量。
3、构造函数 4、make_pair
1构造函数 2作用
构造一个pair 对象其第一个元素设置为x第二个元素设置为y。一般创建pair对象时会比较喜欢使用make_pair去创建。因为用pair创建对象时需要显式传递参数的类型而make_pair可以自己推导参数的类型。
5、代码
void test_pair()
{pairint, int p1;pairint, int p2(10, 20);pairint, int p3(p2);cout p1.first : p1.second endl;cout p2.first : p2.second endl;cout p3.first : p3.second endl;p1 make_pair(30, 40);cout p1.first : p1.second endl;
}6、运行结果 三、set
1、概念
set中只存放元素值key但在底层实际存放的是由key, key构成的键值对。set按照一定次序存储元素即按照其内部比较对象所指示的特定严格弱排序准则进行排序默认按照小于来比较。元素的值key也标识它即该值就是它本身的键值每个元素的值都必须是唯一的即插入元素时不需要构造键值对。set中的元素不能在容器中修改但是可以在容器中插入或者删除它们。
2、代码
void test_set()
{setint se;se.insert(5);se.insert(15);se.insert(8);se.insert(3);se.insert(10);se.insert(7);setint::iterator it se.begin();while (it ! se.end()){//(*it);cout *it ;it;}cout endl;cout se.erase(3) endl;cout se.erase(70) endl;for (auto e : se){cout e ;}cout endl;int x;while (cin x){/*auto ret se.find(x);if (ret ! se.end())cout x 存在 endl;elsecout x 不存在 endl;*///cout se.count(x) endl;if(se.count(x))cout x 存在 endl;elsecout x 不存在 endl;}
}3、运行结果 4、说明
set的使用和其他STL容器的使用类似。代码中count函数为统计x元素在set中出现的次数但因为set中元素唯一所以x存在则返回1否则返回0。代码中注释部分代码的作用和它一样。
四、multiset
1、与set的关系
multiset与set基本一致只是multiset存储的元素是可以重复的。
2、代码
void test_multiset()
{multisetint mse;mse.insert(5);mse.insert(5);mse.insert(15);mse.insert(8);mse.insert(8);mse.insert(3);mse.insert(10);mse.insert(8);mse.insert(7);setint::iterator it mse.begin();while (it ! mse.end()){//(*it);cout *it ;it;}cout endl;cout mse.count(5) endl;cout mse.count(8) endl;cout mse.count(7) endl;
}3、运行结果 五、map
1、概念
map按照特定的次序使用key来比较默认是小于存储由键值key和值value组合而成的元素即键值对。键值key通常用于排序和作为唯一的标识元素值value存储的是与此键值key关联的内容。键值key和值value的类型可以是不相同的。map支持下标访问即在[]中输入key值就可以找到key和value组成的键值对。如果查找的key值的键值对不存在则会构造一个键值对并插入容器中其中value用匿名对象初始化。[]返回的是键值对中value的引用。map中的key是唯一的并且不能对其进行修改。
2、代码
void test_map1()
{mapstring, string mp;mp.insert(make_pair(hello, 你好));mp.insert(make_pair(snow, 雪));mp.insert(make_pair(dragon, 龙));mp[left];mp[right] 右;for (auto kv : mp){cout kv.first : kv.second endl;}cout endl;mp[left] 左左边;mp[right] 右右边;for (auto kv : mp){cout kv.first : kv.second endl;}
}void test_map2()
{mapstring, int mp;string arr[] { 苹果,西瓜,猕猴桃,苹果,香蕉,西瓜,苹果,梨 };for (auto e : arr){mp[e];}for (auto kv : mp){cout kv.first : kv.second endl;}
}3、运行结果 六、multimap
1、与map的关系
multimap与map基本一致只是multimap存储的元素是可以重复的即key可以重复。multimap中没有重载operator[]即multimap不支持使用[]进行下标访问。
2、代码
void test_multimap()
{multimapstring, string mtp;mtp.insert(make_pair(hello, 你好));mtp.insert(make_pair(hello, 你好呀));mtp.insert(make_pair(snow, 雪));mtp.insert(make_pair(snow, 雪白));mtp.insert(make_pair(dragon, 龙));for (auto kv : mtp){cout kv.first : kv.second endl;}cout endl;
}3、运行结果 本文只是简单介绍了如何使用set与map容器没有进行详细说明。主要是为了简单地使用而不是深入研究。 本文到这里就结束了如有错误或者不清楚的地方欢迎评论或者私信 创作不易如果觉得博主写得不错请务必点赞、收藏加关注