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)
|