C++ map的使用
来源:互联网 发布:atlas apache 编辑:程序博客网 时间:2024/05/18 01:37
C++ map的基本操作和使用
Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!
1. map最基本的构造函数;
map<string , int >mapstring; map<int ,string >mapint;
map<sring, char>mapstring; map< char ,string>mapchar;
map<char ,int>mapchar; map<int ,char >mapint;
2. map添加数据;
map<int ,string> maplive;
1.maplive.insert(pair<int,string>(102,"aclive"));
2.maplive.insert(map<int,string>::value_type(321,"hai"));
3, maplive[112]="April";//map中最简单最常用的插入添加!
3,map中元素的查找:
find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。
map<int ,string >::iterator l_it;;
l_it=maplive.find(112);
if(l_it==maplive.end())
cout<<"we do not find 112"<<endl;
else cout<<"wo find 112"<<endl;
4,map中元素的删除:
如果删除112;
map<int ,string >::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 <map>
#include <iostream>
using namespace std;
int main( )
{
map <int, int> m1, m2, m3;
map <int, int>::iterator m1_Iter;
m1.insert ( pair <int, int> ( 1, 10 ) );
m1.insert ( pair <int, int> ( 2, 20 ) );
m1.insert ( pair <int, int> ( 3, 30 ) );
m2.insert ( pair <int, int> ( 10, 100 ) );
m2.insert ( pair <int, int> ( 20, 200 ) );
m3.insert ( pair <int, int> ( 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 <map>
#include <iostream>
using namespace std;
int main( )
{
map <int, int> m1;
map <int, int>::iterator m1_Iter;
m1.insert ( pair <int, int> ( 1, 20 ) );
m1.insert ( pair <int, int> ( 4, 40 ) );
m1.insert ( pair <int, int> ( 3, 60 ) );
m1.insert ( pair <int, int> ( 2, 50 ) );
m1.insert ( pair <int, int> ( 6, 40 ) );
m1.insert ( pair <int, int> ( 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
请按任意键继续. . .
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() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向map尾部的逆向迭代器
rend() 返回一个指向map头部的逆向迭代器
size() 返回map中元素的个数
swap() 交换两个map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素value的函数
#include<map>#include<iostream>using namespace std;int main(){ //map 的三种插入数据的方式 //如果出现相同键值,就会覆盖掉前面的 map<int,string> mymap; map<int,string>::iterator iter; mymap[1]="one"; mymap[2]="twe"; mymap[2]="twee"; mymap[5]="twee"; mymap[3]="three"; mymap.insert(pair<int,string>(101,"alive")); mymap.insert(map<int,string>::value_type(111,"111")); mymap[4]="four"; for(iter = mymap.begin();iter!=mymap.end();iter++) { cout<<iter->first<<" : "<<iter->second<<endl; } cout<<"****************************"<<endl; //根据键值查找元素 //find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。 iter = mymap.find(111); if(iter == mymap.end()) cout<<"we do not find 112"<<endl; else cout<<iter->first<<":"<<iter->second<<endl; cout<<"****************************"<<endl; //根据键值删除元素 iter = mymap.find(111); if(iter == mymap.end()) cout<<"we do not find 111"<<endl; else mymap.erase(iter); for(iter = mymap.begin();iter!=mymap.end();iter++) { cout<<iter->first<<" : "<<iter->second<<endl; } cout<<"****************************"<<endl; //map中 swap的用法: //Map中的swap不是一个容器中的元素交换,而是两个容器交换; map<int,string> mymap2; mymap.swap(mymap2); for(iter = mymap2.begin();iter!=mymap2.end();iter++) { cout<<iter->first<<" : "<<iter->second<<endl; } cout<<"****************************"<<endl; //map的sort问题: //Map中的元素是自动按key升序排序,所以不能对map用sort函数: //cout<<mymap2.count(2);必须输入键值才行 返回值只是0 和 1 //主要作用是用来判别一个key值是否存在,存在则输出 cout<<"****************************"<<endl; //clear() 删除所有元素 cout<<mymap2.size()<<endl; mymap2.clear(); cout<<mymap2.size()<<endl; cout<<"****************************"<<endl; //empty() 如果map为空则返回true if(mymap2.empty()) cout<<"Empty"<<endl; cout<<"****************************"<<endl; return 0;}
// map::count#include <iostream>#include <map>int main (){ std::map<char,int> mymap; char c; mymap ['a']=101; mymap ['c']=202; mymap ['f']=303; for (c='a'; c<'h'; c++) { std::cout << c; if (mymap.count(c)>0) std::cout << " is an element of mymap.\n"; else std::cout << " is not an element of mymap.\n"; } return 0;}
a is an element of mymap.b is not an element of mymap.c is an element of mymap.d is not an element of mymap.e is not an element of mymap.f is an element of mymap.g is not an element of mymap.
count()是返回key出现的次数,在map里,只能是0和1
例如 我们判断一个key是否存在,如果存在就输出,不存在就不输出
map<string, int> a;
cout<<a["abc"]<<endl; //这个肯定是错的
if(a.count("China")) //对了
cout<<a["China"]<<endl;
- 【C++】map的使用
- 【语言-c++】map的使用
- [C++][STL][map]C++ map的基本操作和使用
- C++map的使用总结及常用map操作
- C++map的基本操作和使用
- C++map的基本操作和使用
- C++map的基本操作和使用
- C++map的基本操作和使用
- C++map的基本操作和使用
- C++map的基本操作和使用
- C++map的基本操作和使用
- C++map的基本操作和使用
- C++map的基本操作和使用
- C++map的基本操作和使用
- C++map的基本操作和使用
- C++map的基本操作和使用
- C++map的基本操作和使用
- c++map的基本操作跟使用
- 如何理解 File's Owner 与 First Responder .
- ruby的语法问题
- java里一个对象可否同时调用多个方法
- 杭电1517-A Multiplication Game
- Clear Case 与Clear Quest的集成
- C++ map的使用
- eclipse启动tomcat 访问http://localhost:8080 报404错误
- c语言判断一锅端
- 谈谈最近的工作
- Oracle中打开10046 Trace的各种方法(贝塔中的DBA)
- Android学习之用adb连接模拟器查询sqlite数据库
- Iterator的使用
- windows下编译qtwebkit
- 如何给对话框添加位图