第七十九讲 细说map(5)

map我们说得似乎比vector还要多,我想我们应该加快步伐了,我们说了map的构造,说了map的排序方法,说了map的下标操作,ok,今天我们来看map的另一些操作:
———————————
template<typename Key,typename T,typename Cmp=less<Key>,

typename A=allocator<pair<const Key,T
>>>
class map{
public:

/////

// ///


iterator find(const key_type&

k);

//查找键为K的元素

const_iterator find(const key_type&

k) const;



size_type count(const key_type&

k);

//键为k的元素个数

iterator lower_bound(const key_type&

k);



const_iterator lower_bound(const key_type&

k)const;

//找到键为k的第一个元素。

iterator upper_bound(const key_type&

k);



const_iterator upper_bound(const key_type&

k) const;

//找到键大于k的第一个元素

pair<iterator,iterator>equal_range(const key_type&

k);



pair<const_iterator,const_iterator>equal_range(const key_type&

k) const;



pair<iterator,bool>insert(const valur_type&

val);

//插入元素

iterator insert(iterator pos,const value_type&

val);

//同上,不过pos完全没意义

template<typanema In>

void insert(In first,In last);

//插入一个序列

void erase(iterator pos);

//删除指定元素

size_type erase(const key_type&

k);

//删除键为k的元素

void erase(iterator first,iterator last);

//删除一个区间

void clear();

//删除所有元素

size_type size() const;

//返回元素个数

size_type max_size() const;

//和序列容器一样,直到内存用完

bool empty() const;

//是否为空

void swap(map&

);



/////
};


———————————————
上面的有些操作对map来说毫无意义,就比如说lower_bound和upper_bound,count,equal_rangge等等,为什么呢?因为map里面的键都是唯一的,所以这些东西操作对map来说毫无意义,但对于multimap来说又特别有用了,就比如:
———————————

void f(multimap<string,int>&

m){

multimap::iterator it = m.lower_bound("

abd"

);



multimap::iterator _it = m.upper_bound("

abd"

);



while(it != _it){

cout<<it->
first<<"

:"

<<it->second<<endl;


it++;


}
}
———————————-
上面打印出键为"

abc"

的所有元素,但是这些不会出现map中,都说了在map中毫无意义嘛,那么对于map,其他的我们都是可以使用的,比如:
——————————–

void f(map<string,int>&

m){

typedef map<string,int>::iterator CP;



CP it=m.find("

abc"

);



if(it != m.end()){ //说明已经找到了

cout<<it->
first<<"

:"

<<it->second<<end;


m.erase(it);


m.insert(make_pair("

abcd"

,99));


m.erase(m.find("

Chinese"

),m.find("

Math"

));


cout<<m.size()<<endl;


it = m.begin();


while(it != m.end()){

cout<<it->
first<<"

:"

<<it->second<<endl;


it++;


}

else

cout<<"

haven,t k=abc"

<<endl;


}
———————————–

Ok,关于map我们就说到这里了,如果有不懂的还是那句话直接问,接下来我们是该说些什么呢??????????关于C++我们已经说得差不多了,ok,这样吧,大家去思考一个问题,如果不使用iostream库,我们怎么让下面的代码运行:
—————————–
#include <stdlib.h>
int main(){

My_IO out;



MyInt a=5;



out<<a<<"

n"

;

//在控制台打印出5然后回车。

FILE* f(fopen("

Test.txt"

,"

w+"

));



My_IO fout(f);



fout<<a<<"

n"

;

//创建一个Test.txt文件,然后把5写进文本中;


return 0;


}
——————————

============================
回复D直接查看目录


原文始发于微信公众号(

C/C++的编程教室

):第七十九讲 细说map(5)

|

发表评论