Map:
1.定义:
Map是标准关联式容器之一,一个map是一个键值对序列,即(key ,value)对。它提供基于key的快速检索能力,在一个map中key值是唯一的。
2.Map常用的方法主要有:insert,erase,size,count,begin,end,find,clear,empty。
insert方法:在map中插入一个元素,map中记录的元素通常为键值对,所以,在存储时会把,键和值封装成pair然后进行插入,例如:mymap.insert(pair < string,string>(str,num));其中str和num为string类型的变量。当然也可以简单的写成mymap[str]=num;此处mymap即为map<string,string>类型的变量。因为map在实现过程中对[]进行了重载。
第一种方式若插入的元素的键值已经存在于map中,那么就会插入失败,不会修改元素的键值对信息,若键值在map中查找不到,那么就会将该新元素加入到map中去。
第二种方式比较直观,但存在一个性能的问题。插入时,先在mymap中查找主键为str的项,没发现,然后将一个新的对象插入mymap,键是str,值是一个空字符串,插入完成后,将字符串赋为num, 该方法会将每个值都赋为缺省值,然后再赋为显示的值,如果元素是类对象,则开销比较大。若找到键值为str的项,则用num更改原来的num值。
erase方法:
erase主要是删除map中的某个项,需要参数key,例如mymap.erase(str);此句的意思就是删除key值为str的键值对。
size方法:
统计map中键值对的个数,mymap.size()返回值即为mymap中键值对的个数,若map为空则返回0。
count方法:
统计map中某个键值出现的次数,因为map中键值唯一,所以此方法可以用来检测某键值是否存在,例如在删除时可以mymap.count(str),若为0则可以提示用户此键值不存在,若为1则直接删除。
begin、end方法:
begin方法返回map迭代器类型,通过此迭代器与end方法的返回值进行比较就可以很容易的对map进行遍历。
find方法:
查找某个键在map中的位置。
clear方法:
清空map中的所有元素
empty方法:
判断map是否为空,若为空则返回真若非空则返回假。
用例代码如下:
#include<iostream>
#include<map>
#include<string>
using namespace std;
int main()
{
map<string,int> mymap;
map<string,int>::iterator it;
//插入
mymap.insert ( pair<string,int>("string",1) );
mymap.insert ( pair<string,int>("sort",2) );
mymap.insert ( pair<string,int>("erase",3) );
mymap.insert ( pair<string,int>("begin",4) );
mymap["find"] = 5;
mymap.erase("find");//删除
it = mymap.find("begin");
mymap.erase(it);
cout<<"map中键队的个数:"<<mymap.size()<<endl;
cout<<"map是否为空?"<<mymap.empty()<<endl;
for ( it=mymap.begin() ; it != mymap.end(); it++ )
{
cout << (*it).first << " => " << (*it).second << endl;
}
mymap.clear();//全删除
cout<<"map是否为空?"<<mymap.empty()<<endl;
for ( it=mymap.begin() ; it != mymap.end(); it++ )
{
cout << (*it).first << " => " << (*it).second << endl;
}
return 0;
}
结果:
set的用法:
1.定义:
set(集合)是一个容器,它其中所包含的元素的值是唯一的。set支持唯一键值,set中的值都是特定的,而且只出现一次。
2.set常用的主要方法有:insert,erase,find,count,size,begin,end等。
1、插入:insert()
1)pair<iterator,bool> insert ( const value_type& x )
在迭代器中插入一个数据,如果这个数据不存在就直接插入,其返回值为插入后元素的迭代器和true。如果这个元素已经存在,那么返回当前元素以及false.
2)iterator insert ( iterator position, const value_type& x )
在指定的位置插入指定的数据,position是一个迭代器的位置,x表示的是要插入的数。如果插入成功的话,会返回一个插入新位置的迭代器。
3)template<class InputIterator> void insert(InputIterator first,InputIterator last)
插入一段迭代器区间
**2、删除(erase)
1)void erase(iterator position)**
删除一个迭代器位置
2)size_type erase(sonst key_type& x)
删除成功的话就返回1
3)void erase(iterator first, iterator last)
删除一段迭代器区间
3、查找:find()
iterator find(const key_type& x) const;
若找到返回该迭代器的位置,否则就返回的是最后一个元素后面的位置
4、数量:count()
**size_type count(const key_type& x)con**st
count是为了统计某个数值出现的次数,在set里面不能重复出现相同的数值,count的返回值只有0和1两个值,0表示的是不存在,1表示存在。
用例代码如下:
#include<iostream>
using namespace std;
#include<set>
void fun(set<int> myset)
{
set<int>::iterator it;
for (it=myset.begin(); it!=myset.end(); it++)
{
cout <<*it<<" ";
}
cout << endl;
}
void TestSet()
{
set<int> t;
set<int>::iterator it;
pair<set<int>::iterator,bool> ret;
//第一种插入方法
cout<<"插入1,2,3,4,5:"<<endl;
t.insert(1);
t.insert(2);
t.insert(3);
t.insert(4);
t.insert(5);
fun(t);
cout<<endl;
cout<<"再次插入2:"<<endl;
ret = t.insert(2);
if(ret.second == false)
{
it=ret.first;
}
cout<<*it<<endl;
//第二种插入 ,在某一位置插入
cout<<"在某一位置插入7,8,9:"<<endl;
t.insert (it,7);
t.insert (it,8);
t.insert (it,9);
fun(t);
cout<<endl;
//第三种插入 ,将某个区间插入
cout<<"将一个数组插入:"<<endl;
int a[]= {10,11,12};
t.insert (a,a+3);
fun(t);
cout<<endl;
cout<<"10是否存在:"<<endl;
cout<<"10 count:"<<t.count(10)<<endl;
cout<<"size:"<<t.size()<<endl;
cout<<"删除1:"<<endl;
t.erase (1);
fun(t);
cout<<endl;
cout<<"删除3:"<<endl;
it=t.begin();
it++;
t.erase (it);
fun(t);
cout<<endl;
cout<<"删除11及以后的数:"<<endl;
it=t.find (11);
t.erase ( it, t.end() );
fun(t);
cout<<endl;
}
int main()
{
TestSet();
return 0;
}
结果如下: