目录
头文件:
#include <map>
map和multimap的唯一区别:map中不可以包含重复键值,而multimap中可以。
构造方法
示例:
map<int,string> intmap; map<string,string > othermap; multimap<int,string> stringMultiMap; multimap<string, string > otherStringMultiMap;
注:1,C++中map 用红黑树构造,时间复杂度为log(n)
2,可以用非标准的hash_map代替,其头文件在#include<hash_map>,要权衡时间,空间等合理选择。
操作:
map 和 multimap 用法大致相同,示例代码是map的操作
示例代码:
#include <iostream> #include <iterator> #include <string> #include <map> using namespace std; int main() { map <string,string> stringMap; // 增加 ------------------------------------------------------------------------------------ stringMap["A"]="Apple"; // 没有找到A,自动添加 stringMap["A"]="Ada"; // 找到A,修改 stringMap.insert(pair<string,string>("B","Boy")); // 插入B stringMap.insert(pair<string,string>("B","Bad")); // 重复insert 失败 stringMap.insert(map<string,string>::value_type("C","Cat")); // 插入C stringMap["D"]="Dog"; // 插入D map<string,string>::iterator stringMapItr; // 遍历 ------------------------------------------------------------------------------------ // 遍历map中的类容 cout << "stringMap:" << endl; for (stringMapItr = stringMap.begin();stringMapItr != stringMap.end();stringMapItr ++) { cout << "key=" << stringMapItr->first << ",value=" << stringMapItr->second << endl; } // 查找 ------------------------------------------------------------------------------------ // 通过索引方式查找 - // 如果查出成功返回 value,如果查找不成功将会自动插入键值(脏值) string getValue = stringMap["C"]; cout << "string[\"C\"]=" << getValue << endl; // 通过迭代器查找 - // 如果查出成功返回 对应位置迭代器,如果查找不成功返回最后一个元素的下一个迭代器 stringMapItr = stringMap.find("C"); if(stringMapItr != stringMap.end()) { cout << "\"C\" is find" << endl; } else { cout << "\"C\" is not find" << endl; } // 删除 ------------------------------------------------------------------------------------ stringMapItr = stringMap.begin(); // 用迭代器擦除 stringMap.erase(stringMapItr); // 遍历map中的类容 cout << "stringMap earse A:" << endl; for (stringMapItr = stringMap.begin();stringMapItr != stringMap.end();stringMapItr ++) { cout << "key=" << stringMapItr->first << ",value=" << stringMapItr->second << endl; } // 删除所有元素 stringMap.clear(); // 遍历map中的类容 cout << "stringMap clear:" << endl; for (stringMapItr = stringMap.begin();stringMapItr != stringMap.end();stringMapItr ++) { cout << "key=" << stringMapItr->first << ",value=" << stringMapItr->second << endl; } return 0; }
运行结果:
stringMap:
key=A,value=Ada
key=B,value=Boy
key=C,value=Cat
key=D,value=Dog
string["C"]=Cat
"C" is find
stringMap earse A:
key=B,value=Boy
key=C,value=Cat
key=D,value=Dog
stringMap clear: