核心描述: map 就是从键(key) 到 值(value) 的一个映射.且键值不可重复,内部按照键值排序.
头文件: #include <map>
拓展: multimap 是一个多重映照容器,键值可以重复.unordered_set 是一个内部不排序的映射容器,需包含头文件<unordered_map>
构造方法:
map<int, string> kvm; //构造一个键为 int 型, 值为 string 型的 map
元素的插入:
kvm[1] = "abc"; // 值 "abc" 在 map 中的键值为 1 ------方法1 kvm.insert (map<int, string> :: value_type(2, "def")); // 值 "def" 在 map 中的键值为 2 ------方法2
利用 find 查找:
map<int, string> :: iterator it;//定义迭代器 it = kvm.find(2); //find 只能根据键查找,且find函数返回的是迭代器. if (it == kvm.end()) cout << "Not Found" <<endl; else cout << it->first << " " << it->second << endl; //利用 first 和 second 访问键 和 值.
利用 count 查找:
int cnt = kvm.count(2); //count 按照查找的 键 返回找到的个数.由于不重复即只能返回 0 或 1
根据键访问值:
string ss = kvm[1] //map 根据要访问的 "键" 返回 "键对应的值", 需要用 find 或者 count 判断 "键" 是否存在
map 的删除:
it = kvm.find(1); kvm.erase(it); //利用 find 找到键为 1的位置, 再通过迭代器删除元素 ---------方法1 kvm.erase(1) //删除键为 1 的元素, 成功返回 ”1“ 否则返回 ”0“ ---------方法2 kvm.erase( kvm.begin(), kvm.end() ); //通过迭代器区间性删除, 区间为前闭后开 ---------方法3
常用操作:
kvm.clear() //清空 map kvm.empty() //判断 map 是否为空 kvm.size() //返回 map 中元素的个数
其他查找函数:
map<int, string> :: it; it = lower_bound(key); //返回键值 大于等于 给定键值的第一个位置 it = upper_bound(key); //返回键值 大于 给定键值的第一个位置
结构体类型的构造:
struct NODE{ int x; int y; bool operator < (const NODE& a) const{ if(x == a.x) return y > a.y;//二级排序为 y 的降序 return x < a.x; //以及排序为 x 的升序 } }; map<NODE, string> kvm; //必须重载结构体的 “<"
map 的遍历:
map<int, string>::iterator it; for(it = kvm.begin(); it != kvm.end(); it++) { cout << it -> first << " " << it -> second << endl; }