c++中map的使用

来源:互联网 发布:前锦网络怎么样上海 编辑:程序博客网 时间:2024/06/03 06:04
Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!

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() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数

1. map最基本的构造函数;
mapmapstring; mapmapint;
mapmapstring; map< char ,string>mapchar;
mapmapchar; mapmapint;

2. map添加数据;
map maplive;
第一种:用insert函数插入pair数据:
maplive.insert(pair(102,"aclive"));

第二种:用insert函数插入value_type数据:
maplive.insert(map::value_type(321,"hai"));

第三种:用数组方式插入数据:
maplive[112]="April";//map中最简单最常用的插入添加!

注意:以上三种用法,虽然都可以实现数据的插入,但是它们是有区别的,当然了第一种和第二种在效果上是完成一样的,用insert函数插入数据,在数据的插入上涉及到集合的唯一性这个概念,即当map中有这个关键字时,insert操作是插入数据不了的,但是用数组方式就不同了,它可以覆盖以前该关键字对应的值。

3,map中元素的查找:

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


map::iterator it;;
it=maplive.find(112);
if(l_it==maplive.end())
cout<<"we do not find 112"<<endl;
else
{string value = it->second;
cout<<"wo find 112"<<endl;}

4.map中元素的删除:
如果删除112;

map::iterator l_it;;
l_it=maplive.find(112);
if(l_it==maplive.end())
cout<<"we do not find 112"<<endl;
else maplive.erase(l_it); //delete 112;

5,map中 swap的用法:

Map中的swap不是一个容器中的元素交换,而是两个容器交换;


For example:

#include
#include
using namespace std;

int main( )
{
map m1, m2, m3;
map ::iterator m1_Iter;
m1.insert ( pair ( 1, 10 ) );
m1.insert ( pair ( 2, 20 ) );
m1.insert ( pair ( 3, 30 ) );
m2.insert ( pair ( 10, 100 ) );
m2.insert ( pair ( 20, 200 ) );
m3.insert ( pair ( 30, 300 ) );

cout << "The original map m1 is:";


for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout << " " << m1_Iter->second;
cout << "." << endl;

// This is the member function version of swap

//m2 is said to be the argument map; m1 the target map

m1.swap( m2 );

cout << "After swapping 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, map m2 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 << "After swapping 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
#include
using namespace std;

int main( )
{
map m1;
map ::iterator m1_Iter;

m1.insert ( pair ( 1, 20 ) );
m1.insert ( pair ( 4, 40 ) );
m1.insert ( pair ( 3, 60 ) );
m1.insert ( pair ( 2, 50 ) );
m1.insert ( pair ( 6, 40 ) );
m1.insert ( pair ( 7, 30 ) );

cout << "The original map m1 is:"<<endl;
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout << m1_Iter->first<<" "<<m1_Iter->second<<endl;

}

The original map m1 is:

1 20
2 50
3 60
4 40
6 40
7 30

0 0
原创粉丝点击