map 类简介和例程
一、标准库的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; } |
如上所述,
例程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++编程规范