Map 和 Multimap 将(key/value) 一组当做元素,它们可以根据 key 的排序准则自动将元素排序。
Multimap允许重复元素,map不允许重复。
类型定义:
注意,两个>之间需加上一个空格,因为>>会被编译器视为移位操作符。
Map 和 multimap 通常以平衡二叉树来实现,map 和 multimap 拥有 set 和 multiset 所有能为和所有操作函数。
通常,不能直接改变key 的值,value 的值是可以直接修改的,因此可以想像元素的实质类型是 pair<constkey, T>。
4. map中元素的查找:
find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。
map
l_it=maplive.find(112);//返回的是一个指针
if(l_it==maplive.end())
cout<<"we do not find112"<
cout<<"wo find112"<
map
if(m[112]=="")
cout<<"we do not find112"<
4. map中元素的删除:
如果删除112;
map
l_it =maplive.find(112);
if( l_it == maplive.end())
cout<<"we do not find112"<
5. map中 swap的用法:
Map中的swap不是一个容器中的元素交换,而是两个容器交换;
For example:
#include
usingnamespace std;
int main()
{
map
map
m1.insert( pair
m1.insert ( pair
m1.insert ( pair
m2.insert ( pair
m2.insert ( pair
m3.insert ( pair
cout << "The original map m1is:";
for ( m1_Iter = m1.begin( ) ; m1_Iter != m1.end() ; m1_Iter++ )
cout << " "<
cout << "."<< endl;
// This isthe member function version of swap
// m2 is said to be theargument map; m1 the target map
m1.swap( m2);
cout << "Afterswapping with m2, map m1 is:";
for ( m1_Iter = m1.begin( ) ; m1_Iter != m1.end() ; m1_Iter++ )
cout << " "<< m1_Iter ->second;
cout << "."<< endl;
cout << "After swapping with m2, mapm2 is:";
for ( m1_Iter = m2.begin( ); m1_Iter != m2.end(); m1_Iter++ )
cout << " "<< m1_Iter ->second;
cout << "."<< endl;
// This is the specialized template version of swap
swap( m1, m3 );
cout << "Afterswapping with m3, map m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end(); m1_Iter++ )
cout << " "<< m1_Iter ->second;
cout << "."<< endl;
}
6. map的sort问题:
Map中的元素是自动按key升序排序,所以不能对map用sort函数:
For example:
#include
usingnamespace std;
int main( )
{
map
map
m1.insert (pair
m1.insert ( pair
m1.insert ( pair
m1.insert ( pair
m1.insert ( pair
m1.insert ( pair
cout<< "The original map m1is:"<
cout << m1_Iter->first<<""<
}
The original map m1 is:
1 20
2 50
3 60
4 40
6 40
7 30
7. map的基本操作函数:
C++Maps 是一种关联式容器,包含“关键字/值”对
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果map为空则返回true
end() 返回指向map末尾的迭代器
equal_range() 返回特殊条目的迭代器对
erase() 删除一个元素
find() 查找一个元素
get_allocator() 返回map的配置器
insert() 插入元素
key_comp() 返回比较元素key的函数
lower_bound(k) 返回键值一个迭代器,该迭代器指向第一个键值不小于k的元素。
upper_bound(k) 最后一个大于等于k的位置,也是有一个新元素k进来时的插入位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
value_comp() 返回比较元素value的函数
*