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.若key在map中存在,则返回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位置的元素,或者删除在start和end之间的元素,或者删除那些值为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.插入val到pos的后面,然后返回一个指向这个元素的迭代器。
2.插入start到end的元素到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通过调用这个函数,把新元素中的key和map里面已有元素的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中已经插入了1,2,3,4的话,如果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;
}
上面的例子主要讲了插入数据的集中方法,1)insert,2)运算符;
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++;
}