由于map容器中存储的数据都是成对出现的,因此我们需要使用pair来帮助我们完成存储
这里我们只考虑拷贝构造
- int main()
- {
- //map容器中的数据都是成对出现的,插入的数据必须是对组
- map<string, int>m;
- m.insert(pair<string, int>("张三", 18));
- m.insert(pair<string, int>("李四", 28));
- m.insert(pair<string, int>("王五", 17));
- m.insert(pair<string, int>("赵二", 32));
- Print(m);
- cout << "------------" << endl;
-
- //拷贝构造
- map<string, int>m1(m);
- Print(m1);
-
- return 0;
- }
使用 = 来帮助我们完成赋值
- int main()
- {
- //map容器中的数据都是成对出现的,插入的数据必须是对组
- map<string, int>m;
- m.insert(pair<string, int>("张三", 18));
- m.insert(pair<string, int>("李四", 28));
- m.insert(pair<string, int>("王五", 17));
- m.insert(pair<string, int>("赵二", 32));
- Print(m);
-
- //赋值拷贝
- cout << "------------" << endl;
- map<string, int>m2;
- m2 = m;
- Print(m2);
- return 0;
- }
这里我们使用容器中的size函数,它将返回map容器中的元素个数
- void Print(const map<int, int>& m)
- {
- for (auto i = m.begin(); i != m.end(); i++)
- {
- cout << i->first << " " << i->second << endl;
- }
- }
-
- //大小计算
- void test01()
- {
- map<int, int>m1;
-
- for (int i = 0; i < 5; i++)
- {
- m1.insert(pair<int, int>(i, i));
- }
- Print(m1);
- if (m1.empty())
- {
- cout << "map容器为空" << endl;
- }
- else
- {
- cout << "map容器不为空" << endl;
- cout << "容器的大小是:" << m1.size() << endl;
- }
- }
-
- int main()
- {
- test01();
- return 0;
- }
swap可以交换两个容器的空间
- void Print(const map<int, int>& m)
- {
- for (auto i = m.begin(); i != m.end(); i++)
- {
- cout << i->first << " " << i->second << endl;
- }
- }
- //交换操作
- void test02()
- {
- map<int, int>m1;
-
- for (int i = 0; i < 5; i++)
- {
- m1.insert(pair<int, int>(i, i));
- }
-
- Print(m1);
-
- map<int, int>m2;
- for (int i = 0; i < 3; i++)
- {
- m2.insert(pair<int, int>(i + 3, i + 3));
- }
- cout << "--------------" << endl;
- Print(m2);
-
- cout << "交换后" << endl;
- m1.swap(m2);
- Print(m1);
- cout << "--------------" << endl;
-
- Print(m2);
- }
- int main()
- {
- test02();
- return 0;
- }
这里我们主要考虑map容器插入数据的方式:
第一种
m.insert(pair<int, int>(1, 10));
第二种
m.insert(make_pair(2, 20));
第三种
m.insert(map<int, int>::value_type(3, 30));
第四种
m[4] = 40;
添加后的结果:
因为map容器会将插入的值根据键值来进行排序,因为我们只考虑插入的方式即可,不考虑插入位置等
- void Print(const map<int, int>& m)
- {
- for (auto i = m.begin(); i != m.end(); i++)
- {
- cout <<"key = "<< i->first << " value = " << i->second << endl;
- }
- }
- void test01()
- {
- map<int, int>m;
- //第一种
- m.insert(pair<int, int>(1, 10));
-
- //第二种
- m.insert(make_pair(2, 20));
-
- //第三种
- m.insert(map<int, int>::value_type(3, 30));
-
- //第四种
- m[4] = 40;
- Print(m);
- cout << endl;
- //1.按照迭代器删除
- m.erase(m.begin());
- Print(m);
- cout << endl;
-
- //2.删除键值为3
- m.erase(3);
- Print(m);
-
- cout << endl;
- //3.删除区间[m.begin(),m.end())的所有值
- m.erase(m.begin(), m.end());
- Print(m);
- }
- int main()
- {
- test01();
- return 0;
- }
删除后的结果:
如果找到查找的元素,则返回该元素的迭代器,否则返回map::end
- void test01()
- {
- map<int, int>m;
- m.insert(make_pair(1, 10));
- m.insert(make_pair(2, 20));
- m.insert(make_pair(3, 30));
- auto p = m.find(55);
- if (p == m.end())
- {
- cout << "没有找到" << endl;
- }
- else
- {
- cout << "first = " << p->first << " second = " << p->second;
- }
- p = m.find(3);
- if (p == m.end())
- {
- cout << "没有找到" << endl;
- }
- else
- {
- cout << "first = " << p->first << " second = " << p->second;
- }
-
- }
- int main()
- {
- test01();
- return 0;
- }
运行结果如下:
查找键值k是否存在,如果存在则返回1,不存在则返回0
- void test01()
- {
- map<int, int>m;
- m.insert(make_pair(1, 10));
- m.insert(make_pair(2, 20));
- m.insert(make_pair(3, 30));
- cout << m.count(3) << endl;
- cout << m.count(5) << endl;
- }
- int main()
- {
- test01();
- return 0;
- }
运行结果如下: