#include <iostream> #include <map> using namespace std; // map构造函数 // map<T1, T2> mapTT;//map 默认构造函数: // map(const map &mp);//拷贝构造函数 // map 赋值操作 // map& operator=(const map &mp);//重载等号操作符 // swap(mp);//交换两个集合容器 // // map 大小操作 // size();//返回容器中元素的数目 // empty();//判断容器是否为空 // // map 插入数据元素操作 // map.insert(...); //往容器插入元素,返回 pair<iterator,bool> // map<int, string> mapStu; // // 第一种 通过 pair 的方式插入对象 // mapStu.insert(pair<int, string>(3, "小张")); // // 第二种 通过 pair 的方式插入对象 // mapStu.inset(make_pair(-1, "校长")); // // 第三种 通过 value_type 的方式插入对象 // mapStu.insert(map<int, string>::value_type(1, "小李")); // // 第四种 通过数组的方式插入值 // mapStu[3] = "小刘"; // mapStu[5] = "小王"; // map 删除操作 // clear();//删除所有元素 // erase(pos);//删除 pos 迭代器所指的元素,返回下一个元素的迭代器。 // erase(beg, end);//删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。 // erase(keyElem);//删除容器中 key 为 keyElem 的对组。 // // map 查找操作 // find(key);//查找键 key 是否存在,若存在,返回该键的元素的迭代器;/若不存在,返回 map.end(); // count(keyElem);//返回容器中 key 为 keyElem 的对组个数。对 map 来说,要么是 0,要么是 1。对 // multimap 来说,值可能大于 1。 // lower_bound(keyElem);//返回第一个 key<=keyElem 元素的迭代器。 // upper_bound(keyElem);//返回第一个 key>keyElem 元素的迭代器。 // equal_range(keyElem);//返回容器中 key 与 keyElem 相等的上下限的两个迭代器。 void printMap(map<int, int>& myMap) { for (map<int, int>::iterator it = myMap.begin(); it != myMap.end(); it++) { cout << "key = " << (*it).first << " " << "value = " << (*it).second << endl; } cout << "---------------------" << endl; } // map容器初始化 void test01() { // map容器模版参数,第一个参数key的类型,第二个参数value类型 map<int,int> mymap; // 插入数据 pair.first key值 pair.second value值 // 第一种插入方式 pair<map<int, int>::iterator, bool> ret = mymap.insert(pair<int, int>(10, 10)); if (ret.second) { cout << "第一次插入成功!" << endl; } else { cout << "第一次插入失败!" << endl; } ret = mymap.insert(pair<int, int>(10, 20)); if (ret.second) { cout << "第一次插入成功!" << endl; } else { cout << "第一次插入失败!" << endl; } // 第二种插入方式 mymap.insert(make_pair(20, 20)); // 第三种插入方式 mymap.insert(map<int, int>::value_type(30, 30)); // 第四种插入方式 // 如果发现key不存在,创建pair插入到map容器中,如果发现key存在,那么会修改key对应的value mymap[40] = 40; printMap(mymap); mymap[10] = 20; printMap(mymap); mymap[50] = 50; printMap(mymap); //如果通过[]方式去访问map中一个不存在key,那么map会将这个访问的key插入到map中,并且给value一个默认值 cout << "mymap[60] = " << mymap[60] << endl; printMap(mymap); } // 自定义数据类型排序 class MyKey { public: MyKey(int index, int id) { this->mIndex = index; this->mID = id; } public: int mIndex; int mID; }; struct Mycompare { bool operator()(MyKey key1, MyKey key2) { return key1.mIndex > key2.mIndex; } }; void test02() { map<MyKey, int, Mycompare> mymap; mymap.insert(make_pair(MyKey(1, 2), 10)); mymap.insert(make_pair(MyKey(4, 5), 20)); for (map<MyKey, int, Mycompare>::iterator it = mymap.begin(); it != mymap.end(); it++) { cout << it->first.mIndex << ":" << it->first.mID << "=" << it->second << endl; } cout << "---------------------" << endl; } // equal_range void test03() { map<int, int> mymap; mymap.insert(make_pair(1, 4)); mymap.insert(make_pair(2, 5)); mymap.insert(make_pair(3, 6)); pair<map<int, int>::iterator, map<int, int>::iterator> ret = mymap.equal_range(8); if (ret.first != mymap.end()) { cout << "找到lower_bound" << endl; } else { cout << "没有找到!" << endl; } if (ret.second != mymap.end()) { cout << "找到upper_bound" << endl; } else { cout << "没有找到" << endl; } } int main() { test01(); test02(); test03(); getchar(); return 0; }