您的位置:首页 > 编程语言 > C语言/C++

从零开始学C++之标准库类型(三):map 类简介和例程

2015-03-04 23:18 393 查看
转:/article/1350620.html

一、标准库的map类型

使用map得包含map类所在的头文件

template <
class Key,
class Type,
class Traits = less<Key>,
class Allocator=allocator<pair <const Key, Type> >
>
class map


#include <map>

定义一个map对象: map<string, int> mapTest;

//用string作为索引,存储int对象

例程1:map 插入数据

C++ Code
1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

#include <map>

#include <string>

#include <iostream>

using namespace std;

int main(void)

{

// 插入到map容器内部的元素默认是按照key从小到大来排序。

// key类型一定要重载<运算符

map<string, int> mapTest;

mapTest["aaa"] = 100; // int& operator[](const string& index);

mapTest["eee"] = 500;

mapTest["eee"] = 300; //[]方式,key重复,则被修改成最后一次插入的值。

mapTest.insert(map<string, int>::value_type("bbb", 200));

mapTest.insert(map<string, int>::value_type("bbb", 2000)); //不允许key值重复插入,无效

mapTest.insert(pair<string, int>("ccc", 300));

mapTest.insert(pair<string, int>("ccc", 3000));

mapTest.insert(make_pair("ddd", 400));

mapTest.insert(make_pair("ddd", 4000));

map<string, int>::const_iterator it;

for (it = mapTest.begin(); it != mapTest.end(); ++it)

{

cout << it->first << " " << it->second << endl;

}

return 0;

}


如上所述,key重复,则被修改成最后一次插入的值,如果使用的是multimap 则会保留,这一点的区别与 multiset 和 set 一致。

例程2:map 查找与修改

C++ Code
1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

#include <map>

#include <string>

#include <iostream>

using namespace std;

int main(void)

{

// 插入到map容器内部的无素默认是按照key从小到大来排序。

// key类型一定要重载<运算符

map<string, int> mapTest;

mapTest["aaa"] = 100; // int& operator[](const string& index);

mapTest.insert(map<string, int>::value_type("bbb", 200));

mapTest.insert(pair<string, int>("ccc", 300));

mapTest.insert(make_pair("ddd", 400));

int n = mapTest["bbb"];

cout << n << endl;

mapTest["bbb"] = 2000;

map<string, int>::iterator it;

it = mapTest.find("ccc");

if (it != mapTest.end())

{

it->second = 3000;

}

else

{

cout << "not found" << endl;

}

//map<string,int>::const_iterator it;

for (it = mapTest.begin(); it != mapTest.end(); ++it)

{

cout << it->first << " " << it->second << endl;

}

return 0;

}


例程3:map 删除数据

C++ Code
1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

#include <map>

#include <string>

#include <iostream>

using namespace std;

int main(void)

{

// 插入到map容器内部的无素默认是按照key从小到大来排序。

// key类型一定要重载<运算符

map<string, int> mapTest;

mapTest["aaa"] = 100; // int& operator[](const string& index);

mapTest.insert(map<string, int>::value_type("bbb", 200));

mapTest.insert(pair<string, int>("ccc", 300));

mapTest.insert(make_pair("ddd", 400));

mapTest.erase("bbb");

map<string, int>::const_iterator it;

it = mapTest.find("ccc");

if (it != mapTest.end())

{

mapTest.erase(it);

}

for (it = mapTest.begin(); it != mapTest.end(); ++it)

{

cout << it->first << " " << it->second << endl;

}

return 0;

}


例程4:使用map 计算每个单词出现的次数

C++ Code
1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

/*************************************************************************

> File Name: count_words.cpp

> Author: Simba

> Mail: dameng34@163.com

> Created Time: Sat 10 Nov 2012 10:20:14 AM CST

************************************************************************/

#include<iostream>

#include<map>

#include<string>

#include<iterator>

using namespace std;

int main(void)

{

string s;

map<string, int> counters;

// read the input

while (cin >> s)

++counters[s];

cout << endl;

for (map<string, int> :: const_iterator it = counters.begin();

it != counters.end(); ++it)

{

cout << it ->first << "\t" << it->second << endl;

}

return 0;

}



参考:

C++ primer 第四版

Effective C++ 3rd

C++编程规范
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐