c++ map/multimap,set/multiset的使用(续)
来源:互联网 发布:js .target方法 编辑:程序博客网 时间:2024/05/24 06:51
一,set的使用
上节我们主要讲了map的主要用法,这节将继续学习set的相关知识
有了map的使用心得,使用set就变得较为简单,需要强调的是,set是key结构,并且也不无法插入相同kay值的节点,另外需要注意的是,在访问set中的数据时我们使用其定义好的迭代器,其次set并没有对“【】”进行重载,在使用时我们需要注意这一点,请看代码,及运行结果:
#pragma once#include<set>#include<string>#include<iostream>using namespace std;//map与set都是c++里面的标准容器,它们底层的实现都是通过红黑树完成的,而map与set的区别在与map为kay-value结构,而set为key结构//由于是红黑树,所以它里面不允许有相同kay值存在,所以若重复插入,结果不变。void myTest(){ set<int> mySet; mySet.insert(1); mySet.insert(3); mySet.insert(2); mySet.insert(11); mySet.insert(7); set<int>::iterator it = mySet.begin(); for (; it != mySet.end(); it++) { cout << *it << " "; } cout << endl; cout << "删除后的情况" << endl; mySet.erase(2); mySet.erase(11); for (it=mySet.begin(); it != mySet.end(); it++) { cout << *it << " "; }}
结果截图:
二,multimap/multiset
multimap和multiset都被包含在map,set包中,另外multimap及multiset的使用与map/set的使用方法类似,所以便不再赘言,但需要注意的是multimap及multiset最大的特点便是可以存在冗余的值,请看下面的例子:
#pragma once#include<map>#include<set>#include<string>#include<iostream>using namespace std;void myTest(){ multimap<string, string> myMultimap; myMultimap.insert(make_pair("111", "星期一")); myMultimap.insert(make_pair("111", "Monday")); myMultimap.insert(make_pair("222", "星期二")); myMultimap.insert(make_pair("222", "Tuesday")); multimap<string, string>::iterator it = myMultimap.begin(); cout << "multimap的使用实例:" << endl; for (; it != myMultimap.end(); it++) { cout << (*it).first << " " << (*it).second << endl; } //multiset的使用 cout << endl; cout << "multiset的使用:" << endl; multiset<int> myMultiset; myMultiset.insert(123); myMultiset.insert(130); myMultiset.insert(151); myMultiset.insert(160); myMultiset.insert(130); myMultiset.insert(123); multiset<int>::iterator it2 = myMultiset.begin(); for (; it2 != myMultiset.end(); it2++) { cout <<*it2<< endl; }}
运行结果截图:
从结果我们可以看到,multimap及multi set当中允许插入相同kay值的数据而不会产生错误,这是因为其对红黑树的底层进行了处理,当kay
值相同时则插入到红黑树的右边,或者插入其左边,于是便实现了冗余数据的存储
三,总结
由于map/multimap,set/multiset内部都是通过红黑树实现的,所以在进行删除,修改,查找时都具有很高的效率,能够达到O(logN),其中map是kay-value结构,而set则为kay结构,它们的内部无法存在相同的kay值;于是multimap,及multiset便是为了应对数据的冗余而产生的;另外你也可以通过map及set的特性对重复的数据进行排除;由于它们的输出默认为中序,所以还可以采用它们来进行排序等操作。
2017/6/16
阅读全文
0 0
- c++ map/multimap,set/multiset的使用(续)
- C++:关联容器(set,multiset,map,multimap)
- map,multimap,set,multiset
- set,map,multiset,multimap
- map,multimap,set,multiset
- map/multimap/set/multiset
- set/multiset,map/multimap的使用与比较+pair介绍
- map、set、multiset、multimap的有序性
- map , multimap , set , multiset的用法
- map,set,multimap,multiset的异同
- map、set、multimap、multiset(转)
- 关联容器(map、set、multimap、multiset)
- 关联容器(set & multiset & Map& multimap)
- map、multimap、set、multiset容器
- (c++)vector map multimap set 的使用
- C++STL中,map/multimap,set/multiset 和vector的排序
- c++ map/multimap,set/multiset的用法及比较
- 【STL】STL中红黑树的应用set、multiset、map、multimap
- Javascript模块化编程
- 51nod 1577 异或凑数
- ios 绘图
- Mac系统中安装JDK
- 【机器学习小白日记】 Ubuntu16.04+Caffe+GTX1070+CUDA8.0+OpenCV3.2安装
- c++ map/multimap,set/multiset的使用(续)
- 循环获取json中key为变量时所对应的值
- Work深度剖析
- string字符串转成int类型 不用自带的方法
- js对象的set/get方法案例
- EL隐式对象有哪些
- leetcode 3Sum Closest(Java)
- 关于CSDN blog博客被封的说明
- Spring MVC 第二记