头文件:
#include <map>
map和multimap的唯一区别:map中不可以包含重复键值,而multimap中可以。
构造方法
- mType<type1,type2> tmap() 默认构造方法
- mType<type1,type2> tmap(beg,end) 通过迭代器构造
示例:
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>,要权衡时间,空间等合理选择。
操作:
- tmap.insert(pair<type1,tpye2>) 添加一个键值对
- tmap.insert(map<type1,type2>::value_type(key,value)) 添加 一个map
- tmap[key] = value 通过索引添加// 若key不存在是添加操作,存在是修改操作
- tmap.find(key) 查找,返回迭代器,没有找到返回最后一个元素的迭代器
- tmap.erase(pos) 通过迭代器删除
- tmap.clear() 删除所有元素
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: