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

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

2013-07-11 20:02 495 查看
一、标准库的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++编程规范
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐