map 学习笔记
1.map 常用功能
/**************************************** * File Name: map.cpp * Author: sky0917 * Created Time: 2014年06月 4日 15:49:14 ****************************************/ #include <map> #include <cmath> #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; int main(){ /* * map::insert 的使用 */ map<string, int> word_count; word_count.insert(map<string, int>::value_type("zhouzhou",1)); cout<<word_count["zhouzhou"]<<endl; pair<string, int> p("zz",2); word_count.insert(p); cout<<word_count["zz"]<<endl; word_count.insert(make_pair("zz", 1)); cout<<p.first<<" "<<p.second<<endl; word_count["ww"] = 0; pair<map<string, int>::iterator, bool> res = word_count.insert(make_pair("zz",8)); cout<<++res.first->second<<endl; word_count["tt"] = 7; cout<<"start"<<endl; for (map<string, int>::iterator it = word_count.begin(); it != word_count.end(); ++it){ cout<<(*it).first<<" "<<(*it).second<<endl; } cout<<"end"<<endl; cout<<"size = " << word_count.size()<<"----"<<endl; /* * 查找并读取 map 中的元素 */ int tmp = word_count["sss"]; tmp = word_count["2sdf"]; // 这种查找方式的缺点在于如果该元素不存在,则会插入一个具有该键值的新元素 word_count["zz"] = 9; if (word_count.count("zz")){ int cont = word_count["zz"]; } map<string, int>::iterator iot = word_count.find("zz"); if (iot != word_count.end()) cout<<(*iot).first<<" "<<(*iot).second<<endl; /* * 从 map 中删除元素 */ word_count["bbz"] = 44; cout<<word_count["bbz"]<<" "<<endl; cout<<"size = "<< word_count.size()<<endl; word_count.erase("bbz"); cout<<"size = "<< word_count.size()<<endl; return 0; }
2. map 示例:
/**************************************** * File Name: map_test.cpp * Author: sky0917 * Created Time: 2014年06月 4日 17:27:34 ****************************************/ #include <map> #include <cmath> #include <queue> #include <cstdio> #include <cstring> #include <fstream> #include <sstream> #include <iostream> #include <algorithm> using namespace std; ifstream& open_file(ifstream &in, const string &file) { in.close(); // colse in case it was already open in.clear(); // clear any existing errors // if open fails, the stream will be in an invalid state in.open(file.c_str()); // open return in; } int main(int argc, char **argv){ map<string, string> trm; string key , value; if (argc != 3){ puts("wrong number of arguments"); exit(0); } ifstream mfile; if (!open_file(mfile, argv[1])){ puts("cann't open the first file"); exit(0); } while (mfile >> key >> value){ cout<<"key = " << key <<"value = "<<value<<endl; trm.insert(make_pair(key, value)); } ifstream input; if (!open_file(input, argv[2])){ puts("cann't open the last file"); exit(0); } string line; while (getline(input, line)){ istringstream stream(line); // read the line a word at a time string word; bool firstword = true; while (stream >> word){ map<string, string>::const_iterator it = trm.find(word); if (it != trm.end()) word = it->second; if (firstword) firstword = false; else cout<<" "; cout<<word; } cout<<endl; } return 0; }