map 整理笔记

  • map 是关联容器的一种, 其每个元素分为 关键字该关键字的值 两部分
  • map 容器中关键字唯一, 且按关键字排序

常见接口 接口作用
begin() 返回指向 map 头部的迭代器
end() 返回指向 map 末尾的迭代器, 最后一个元素的下一个
count() 返回指定元素出现的 次数
size() 返回map中元素的 个数
max_size() 返回可以容纳的 最大元素个数
insert() 插入元素
find() 查找一个元素, 返回一个迭代器
equal_range 返回两个迭代器,第一个表示 <= 查找元素 的迭代器位置,第二个是 >它 的迭代器位置
empty() 如果 map 为空则返回 true
erase() 删除一个元素
clear() 删除所有元素
swap() 交换两个 map

#include <iostream>
#include <map>
using namespace std;

int main() {
    	map<int, string> myMap;

    	// 三种插入方式
    	// 1.  [] 直接插入
    	myMap[1] = "Aaaaaaa";
    	// 如果再有
    	myMap[1] = "Aaaa";
    	// 则会覆盖掉前面的"Aaaa", 因为 map 关键字的唯一性
    	// 当然, 如果关键字为 1 的元素不存在, 就会新建并且插入 map

    	// 2. 利用 insert 函数
    	// (1)通过 pair<int, string>(2, ”Bbbb“) 构造 pair 元素
    	myMap.insert(pair<int, string>(2, "Bbbb"));
    	// (2)通过 make_pair 构造 pair 元素
    	myMap.insert(make_pair(3, "Cccc"));
    	// (3)通过 value_type 构造 pair 元素
    	myMap.insert(map<int, string>::value_type(4, "Dddd"));

    	// 用 insert 重复插入 则不成功
    	pair<map<int, string>::iterator, bool> ptr = myMap.insert(make_pair(1, "Aaaaaaa"));
    	if(ptr.second) {
        		cout << "插入成功" << endl;
    	} else {
        		cout << "插入不成功" << endl;
    	}

    	// 元素的删除
    	// 删除 值为 "Dddd" 的元素
    	for(map<int, string>::iterator ptr = myMap.begin(); ptr != myMap.end(); ptr++) {
        		if(ptr->second.compare("Dddd") == 0) {
            			myMap.erase(ptr);
            			cout << "删除成功" << endl;
        		}
    	}

    	myMap[5] = "Eeee";
    	// 统计 Eeee 出现的次数
    	cout << myMap.count(11) << endl;

    	// 查找 key = 4 的键值对
    	map<int, string>::iterator pt = myMap.find(4);
    	if(pt != myMap.end()) {
        		cout << "存在 key 值为 4 的键值对" << endl;
    	} else {
        		cout << "不存在 key 值为 4 的键值对" << endl;
    	}

    	// 查找 key = 4 的键值对的位置
    	// 返回两个迭代器,第一个表示 <=4 的迭代器位置,第二个是 >4 的迭代器位置
    	pair<map<int, string>::iterator, map<int, string>::iterator> myPair = myMap.equal_range(4);
    	if(myPair.first == myMap.end()) {
        		cout << "小于等于 4 的位置不存在" << endl;
    	} else {
        		cout << myPair.first->first << " " << myPair.first->second << endl;
    	}

    	if(myPair.second == myMap.end()) {
        		cout << "大于 4 的位置不存在" << endl;
    	} else {
        		cout << myPair.second->first << " " << myPair.second->second << endl;
    	}

    	// 遍历 map
    	for(auto ptr: myMap) {
        		cout << ptr.first << " " << ptr.second << endl;
    	}

    	// 清除 map
    	myMap.clear();

    	// map 是否为空
    	cout << "map 是否为空: " << myMap.empty() << endl;

    	return 0;
}

注意: map 和 multimap 十分类似,区别在于 map 容器中元素的关键字不能重复。而 multimap 可以, multimap 有的成员函数,map 都有。此外,map 还有成员函数 operator[ ]:T & operator[ ] (Key k);

该成员函数返回 first 值为 k 的元素的 second 部分的引用。如果容器中没有元素的 first 值等于 k,则自动添加一个 first 值为 k 的元素。如果该元素的 second 成员变量是一个对象,则用无参构造函数对其初始化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章