3.9 map/ multimap容器
高效率:快速从大量数据中找到你想要的数据
所有元素在插入时会根据key值自动排序
#include<iostream> #include<map> using namespace std; void printMap(const map<int, int>& m) { for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) { cout << "key: " << (*it).first << " value: " << (*it).second << endl; } cout << endl; // *it是一个pair } // map容器 构造和赋值 void test01() { map<int, int> m; // 创建map m.insert(pair<int, int>(1, 10)); //pair<int, int> 其实是匿名对组 m.insert(pair<int, int>(3, 30)); m.insert(pair<int, int>(2, 20)); printMap(m); // 拷贝构造 map<int, int> m2(m); printMap(m2); // 赋值 map<int, int> m3; m3 = m2; printMap(m3); } int main() { test01(); return 0; }
别的没啥难度,但是插入数据得注意是对组
map中所有数据都是对组!
#include<iostream> #include<map> using namespace std; void printMap(const map<int, int>& m) { for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) { cout << "key: " << (*it).first << " value: " << (*it).second << endl; } cout << endl; // *it是一个pair } // map容器 大小 是否为空 和交换 void test01() { map<int, int> m; // 创建map m.insert(pair<int, int>(1, 10)); //pair<int, int> 其实是匿名对组 m.insert(pair<int, int>(3, 30)); m.insert(pair<int, int>(2, 20)); cout << m.size() << endl; cout << m.empty() << endl; map<int, int> m2; m2.insert(pair<int, int>(4, 40)); m.swap(m2); printMap(m); } int main() { test01(); return 0; }
#include<iostream> #include<map> using namespace std; void printMap(const map<int, int>& m) { for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) { cout << "key: " << (*it).first << " value: " << (*it).second << endl; } cout << endl; // *it是一个pair } // map容器 插入和删除 void test01() { map<int, int> m; // 创建map m.insert(pair<int, int>(1, 10)); //pair<int, int> 其实是匿名对组 m.insert(make_pair(2, 20)); // 这种更简洁 m.insert(map<int, int>::value_type(3, 30));// 这种忽略,没必要记 m[4] = 40; // 这种简单,但是如果插错了,会给你创建一个,中括号不建议插入,可以利用key来访问value // 方便查找 printMap(m); // 删除 m.erase(m.begin()); // 删除,传入一个迭代器 m.erase(3); // 传入key值,按照key去删除,如果传入的key没有,不会删除任何 m.erase(m.begin(), m.end()); // 相当于清空 m.clear(); // 清空方法 } int main() { test01(); return 0; }
返回的是迭代器 如果结果不是.end(),就说明找到了
count返回的是键值为key的数据数量,为int类型
map容器不允许插入重复的元素,所以对于count,结果要么是0要么是1
multimap可能会大于1
#include<iostream> #include<map> using namespace std; class myCompare { public: bool operator()(int v1, int v2) { return v1 > v2; } }; void printMap(map<int, int, myCompare>& m) { for (map<int, int, myCompare>::iterator it = m.begin(); it != m.end(); it++) { cout << "key: " << it->first << " value: " << (*it).second << endl; } cout << endl; // *it是一个pair } // map容器 排序 void test01() { map<int, int, myCompare> m; // 创建map m.insert(make_pair(1, 10)); // 这种更简洁 m.insert(make_pair(2, 20)); m.insert(make_pair(3, 30)); m.insert(make_pair(4, 40)); printMap(m); } int main() { test01(); return 0; }