请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
最全的c++map的用法此文是复制来的0.0 1. map最基本的构造函数; Y* l1 X- V# c! ~5 L7 @
map<string ,int>mapstring; map<int,string >mapint;; S& u8 R% k% u; `
map<sring,char>mapstring; map< char ,string>mapchar;
, G, u6 c, s8 n; D! smap<char,int>mapchar; map<int ,char>mapint; 2. map添加数据; map<int ,string>maplive;- ^& l) c v+ P2 J/ O/ |) ~
1. maplive.insert(pair<int,string>(102,"aclive"));: N n/ S0 O; j
2. maplive.insert(map<int,string>::value_type(321,"hai"));
6 b* l, ^9 b% N4 v6 O4 x3. maplive[112]="April";//map中最简单最常用的插入添加!
4 q u) j& U1 \: } Y, A" h 3. map中元素的查找: find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。 map<int ,string >::iteratorl_it;;
; Z: D2 `$ `" |* }l_it=maplive.find(112);//返回的是一个指针
; s* @! x$ c$ F1 ?: J1 g; Q7 B9 Wif(l_it==maplive.end())
8 `5 K5 o9 {9 dcout<<"we do not find112"<<endl;0 d: Z6 a, ^& Z% r' T
elsecout<<"wo find112"<<endl;
}! B" |* c7 f8 |
& j: {, J* U; q' ~" X1 F. {map<string,string>m; if(m[112]=="") cout<<"we do not find112"<<endl;
( p! j9 x/ B* s( ^, R 4. map中元素的删除:( F7 j$ |6 F4 N( _7 L
如果删除112;( m8 j9 L' l6 |" u$ K6 X2 i3 @
map<int ,string>::iterator l_it;;! d, d- A; i9 ~. y
l_it =maplive.find(112);4 X/ d1 @0 G6 }) r) Q' @
if( l_it == maplive.end())% G6 I" p3 m2 e0 k
cout<<"we do not find112"<<endl;5 S( L& Q1 x9 N
else maplive.erase(l_it);//delete 112;- t9 X! j2 m- t8 ~: M6 i
5. map中 swap的用法:# J" j( B; P/ [4 i9 `) f
Map中的swap不是一个容器中的元素交换,而是两个容器交换;
. [/ h$ [* l" a% lFor example:
~5 E: l& m( Q; H! A7 k% T- R#include<map>% E- }1 W7 Q' H: e* J( W6 s, F7 C- z
#include<iostream> usingnamespace std; int main()& p5 }- e& f- t, I
{
0 z- W! s3 ~% z7 G4 \map <int, int> m1, m2, m3;* e0 d# ^3 a0 l) b+ t' a
map <int,int>::iterator m1_Iter; m1.insert( pair <int, int>(1, 10 ) );
8 p3 ~' G$ z9 Gm1.insert ( pair <int,int> ( 2, 20 ) );
# [ ^( B; K3 }# ^8 F9 zm1.insert ( pair <int,int> ( 3, 30 ) );# f7 r" G( t! P9 O3 ^3 Y$ t
m2.insert ( pair <int,int> ( 10, 100 ) );
% {, T0 V$ r4 ^3 f6 C, [m2.insert ( pair <int,int> ( 20, 200 ) );9 [3 S, @, K" Z- j" O4 z+ `
m3.insert ( pair <int,int> ( 30, 300 ) ); cout << "The original map m1is:";
8 t+ E* z8 D, e6 T9 H" P% ?# kfor ( m1_Iter = m1.begin( ) ; m1_Iter != m1.end() ; m1_Iter++ )) {$ `' N8 }4 @" F5 q6 v" W4 c
cout << " "<<m1_Iter->second;& e; K, {, q- Y4 b) }4 _
cout << "."<< endl; // This isthe member function version of swap
5 t: ]4 J% C' }& X" k% ?// m2 is said to be theargument map; m1 the target map4 m9 m3 o+ u S* w
m1.swap( m2); cout << "Afterswapping with m2, map m1 is:";- Y5 v q- W4 S
for ( m1_Iter = m1.begin( ) ; m1_Iter != m1.end() ; m1_Iter++ ). `% R( v$ D: `5 C) O, ]) v+ \8 x
cout << " "<< m1_Iter ->second;
- ^$ a1 z& k) U6 m) |* G; lcout << "."<< endl; 8 a. H) p: Q0 ` }% K. ?% Q
cout << "After swapping with m2, mapm2 is:";
9 K' y; `3 i7 g7 i$ G/ E! ^for ( m1_Iter = m2.begin( ); m1_Iter != m2.end(); m1_Iter++ )
) u, ^' f5 @7 U' wcout << " "<< m1_Iter ->second;7 e! M' S( W4 n" _
cout << "."<< endl; 7 x# n* [: C/ d' g9 U: o
// This is the specialized template version of swap
: J \+ B2 b$ i3 nswap( m1, m3 ); cout << "Afterswapping with m3, map m1 is:";
& ^0 ~! M1 k; D. N; Ofor ( m1_Iter = m1.begin( ); m1_Iter != m1.end(); m1_Iter++ )
. f% c0 r( v, i; _" S, Y1 _+ Acout << " "<< m1_Iter ->second;
. U" n5 x- A3 M) \+ Wcout << "."<< endl;1 z: R5 w5 ]: X, }4 B* Q+ f
} 6. map的sort问题:
: k$ `- i, d, u6 qMap中的元素是自动按key升序排序,所以不能对map用sort函数:, \1 \: x- P. {5 E" X
For example:, l& [" V. K5 A
#include<map>3 ~4 _! U, z& m' t
#include<iostream> usingnamespace std; int main( ). o0 `6 L7 x+ w" K9 J
{6 n% ~+ Y# z2 a/ d }+ I; j
map<int, int> m1;
) Y3 o: ^3 T, |, E! J9 Dmap <int,int>::iterator m1_Iter; m1.insert (pair <int, int> (1, 20 ) );
( C. D5 C$ ^1 j& sm1.insert ( pair<int, int> ( 4, 40) );1 `2 k `" w/ u$ D9 t% D
m1.insert ( pair<int, int> ( 3, 60) );
' L+ T7 Z) s4 O4 @2 mm1.insert ( pair<int, int> ( 2, 50) );
* M; f0 h. f4 h# D, ~m1.insert ( pair<int, int> ( 6, 40) );
% o m$ N2 r& ]- o3 z; m( e5 fm1.insert ( pair<int, int> ( 7, 30) ); cout<< "The original map m1is:"<<endl;, e# w( R, Z3 `% n5 K/ S
for ( m1_Iter = m1.begin( );m1_Iter != m1.end( ); m1_Iter++ )
: M3 o5 j! m7 I+ a+ u* qcout << m1_Iter->first<<""<<m1_Iter->second<<endl;
$ X0 V9 n8 l% a7 b1 e- l
# f6 t) @4 P6 e* t3 z}1 d8 m0 h6 T$ S- Q: S% O1 q4 f4 b
The original map m1 is:
/ ?' T6 v. Y, u1 V5 y" X0 `1 20, K* F( x8 x/ I. E+ x
2 50# y$ Y/ d4 k! f5 R! Z7 }& }; ]2 o+ ^5 `
3 60, W7 F* \ }2 ~ A) e& V4 P+ p6 U2 s
4 40) Y" Y# e9 K3 K
6 40" S" m; L+ T5 P! F( ^5 S# I
7 30 7. map的基本操作函数:
& l5 b. W7 G& i, qC++Maps 是一种关联式容器,包含“关键字/值”对: @5 \. h0 Z$ o4 r
begin() 返回指向map头部的迭代器
( [" K; r& j5 a& Mclear() 删除所有元素
4 G0 c9 u9 P) L8 s W* @count() 返回指定元素出现的次数% F, Z4 |6 l" l6 K$ E/ X1 g1 ^# D! A
empty() 如果map为空则返回true% x4 u4 P. W8 q% y5 y x6 p2 t! P$ O6 W
end() 返回指向map末尾的迭代器
( H: U& Z) ?# sequal_range() 返回特殊条目的迭代器对# a& B8 o/ N; h9 L- B4 Y6 j
erase() 删除一个元素
4 g6 x* U3 n! v4 g* [find() 查找一个元素' y' M: I/ H2 z' o
get_allocator() 返回map的配置器& `3 L1 L( q" Q1 y) G m
insert() 插入元素% v1 J$ N k0 L
key_comp() 返回比较元素key的函数6 |6 ^0 O5 U! K/ A/ Z- I
lower_bound() 返回键值>=给定元素的第一个位置 R( Z Q6 E0 {4 x8 R$ x
max_size() 返回可以容纳的最大元素个数
2 g2 m, Y1 f) K# r: u) ^rbegin() 返回一个指向map尾部的逆向迭代器8 T7 Y9 Q0 U- G
rend() 返回一个指向map头部的逆向迭代器
5 L, |. G* T4 O- i/ @size() 返回map中元素的个数# i7 f5 e1 ]; I" X
swap() 交换两个map
; w8 T4 ?! m0 ?, F7 mupper_bound() 返回键值>给定元素的第一个位置2 a& \! x; P4 g8 f, e, g
value_comp() 返回比较元素value的函数 + }" Z, C! t# e2 r4 B
|