一,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