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
原创粉丝点击