STL容器--关联容器map

map的主要功能在于:只有你知道了一个值的关键字,就能够找到这个值。例如,定义一个map对象m,在该对象中使用人名作为关键字,并将每个人的电话号码存储为值。那么可以使用m[“张三”]表示张三的电话号码。从前面的例子可以看出map类有一个非常优越的特点:关联数组。在普通的数组中,索引是一个整数。而在关联数组中,索引是一个键,并且键可以是任意类型的,可以是String、double、int类型,甚至可以是一些用户定义的类。
    map和set的插入删除效率比用其他序列容器高,因为对于关联容器来说,不需要做内存拷贝和内存移动。map和set容器内所有元素都是以节点的方式来存储。

 

函数列表如下:

begin() 返回指向map头部的迭代器
clear()
删除所有元素
count()
返回指定元素出现的次数
empty()
如果map为空则返回true
end()
返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase()
删除一个元素
find() 查找一个元素
get_allocator()
返回map的配置器
insert()
插入元素
key_comp()返回比较元素key的函数
lower_bound()
返回键值>=给定元素的第一个位置
max_size()
返回可以容纳的最大元素个数
rbegin()
返回一个指向map尾部的逆向迭代器
rend()
返回一个指向map头部的逆向迭代器
size()
返回map中元素的个数
swap()
交换两个map
upper_bound()
返回键值>给定元素的第一个位置
value_comp()
返回比较元素value的函数

 

运算符[]

为了添加元素,可使用下标算符[]
map <string, string> addresses;
addresses["Paul W."]="
xxx";

 

begin
语法:
  iterator begin();
begin()
函数返回一个迭代器指向map的第一个元素。

 

clear
语法:
  void clear();
clear()
函数删除map中的所有元素。

 

count
语法:
  size_type count( const KEY_TYPE &key );
count()
函数返回map中键值等于key的元素的个数。用count函数来判定关键字是否出现,其缺点是无法定位数据出现位置,由于map的特性,一对一的映射关系,就决定了count函数的返回值只有两个,要么是0,要么是1.keymap中存在,则返回1.

 

empty
语法:
  bool empty();
empty()
函数如果map为空返回真(true),否则返回假(false)

 

end
语法:
  iterator end();
end()
函数返回一个迭代器指向map的尾部。

 

equal_range
Syntax:
  pair equal_range( const KEY_TYPE &key );
equal_range()
函数返回两个迭代器——一个指向第一个键值为key的元素,另一个指向最后一个键值为key的元素。

 

erase
语法:
  void erase( iterator pos );
  void erase( iterator start, iterator end );
  size_type erase( const KEY_TYPE &key );
erase()
函数删除在pos位置的元素,或者删除在startend之间的元素,或者删除那些值为key的所有元素。

 

find
语法:
  iterator find( const KEY_TYPE &key );
find()
函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。

 

get_allocator
语法:
  allocator_type get_allocator();
get_allocator()
函数返回map的配置器。

 

insert
语法:
  iterator insert( iterator pos, const pair<KEY_TYPE,VALUE_TYPE>&val );
  void insert( input_iterator start, input_iterator end );
  pair<iterator, bool> insert( const pair<KEY_TYPE,VALUE_TYPE>&val );
1.
插入valpos的后面,然后返回一个指向这个元素的迭代器。
2.
插入startend的元素到map中。
3.
只有在val不存在时插入val。返回值是一个指向被插入元素的迭代器和一个描述是否插入的bool
因为map会排序,插入元素后,关键字将按升序排列,而与插入时的pos无关。

 

key_comp
语法:
   key_compare key_comp();
   key_comp()
函数返回一个比较key的函数。
  
先说key_compare类,它是一个函数对象类型,这种类型的对象的行为象一个函数指针,指向的函数必须是接受两个key类型的值并返回一个bool类型的值。象这样:boolmyCompare(const key_type& key1, const key_type& key2);然后你在定义map的时候,可以指定一个key_compare类型,在map的声明中第三个模板参数就是。如果你不指定,它有一个缺省的less<>可用。这个函数对象被map用于插入一个新元素时确定它的位置,即map通过调用这个函数,把新元素中的keymap里面已有元素的key进行比较,以找出新元素应该放在哪。

 

lower_bound
语法:
   iterator lower_bound(const Key& key);
   const_iterator lower_bound(const Key& key) const;
lower_bound()
函数返回一个迭代器,指向map中键值<=key的第一个元素。If nosuch element exists, the function returns end().
例如:map中已经插入了1234的话,如果lower_bound(2)的话,返回的2,而upper-bound(2)的话,返回的就是3.

 

max_size
语法:
  size_type max_size();
max_size()
函数返回map能够保存的最大元素个数。

 

rbegin
语法:
  reverse_iterator rbegin();
rbegin()
函数返回一个指向map尾部的逆向迭代器。

 

rend
语法:
  reverse_iterator rend();
rend()
函数返回一个指向map头部的逆向迭代器。

 

size
语法:
  size_type size();
size()
函数返回map中保存的元素个数。

 

swap
语法:
  void swap( map &obj );
swap()
交换obj和现map中的元素。
upper_bound
语法:
  iterator upper_bound( const KEY_TYPE &key );
upper_bound()
函数返回一个迭代器,指向map中键值>key的第一个元素。


value_comp
语法:
  value_compare value_comp();
value_comp()
函数返回一个比较元素value的函数。

 

 

举例:

#include<iostream>

#include<map>

#include<string>

using namespacestd;

 

 

int _tmain(intargc, _TCHAR*argv[])

{

     map<string,int>m,n;

 

     string key;int value;

 

     value=1;key="A12";

     m[key]=value;

 

     value=5;key="A3";

     m[key]=value;

 

     m["D5"]=4;

     m["A2"]=5;

 

     map<string,int>::iteratorp=m.begin();

     p++;p++;

 

     m.insert(p,pair<string,int>("A1",7));

     m["B6"]=3;

 

     p=m.begin();

     for (unsignedint i=0; i<m.size();i++)

     {

         cout<<p->first<<" "<<p->second<<endl;

         p++;

     }

     cout<<m.count("E")<<endl;

     return 0;

}

 

 

 

上面的例子主要讲了插入数据的集中方法,1insert2)运算符;

 

     map<int,string> mapStudent;

     mapStudent.insert(pair<int,string>(1,"student_one"));

     mapStudent.insert(pair<int,string>(2,"student_two"));

     mapStudent.insert(pair<int,string>(3,"student_three"));

 

     map<int,string>::iteratorp=mapStudent.begin();

     for (unsignedint i=0;i<mapStudent.size();i++)

     {

          cout <<p->first <<""<<p->second <<endl;

         p++;

     }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值