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(name);此句的意思就是删除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; }结果如下:
新闻热点
疑难解答