由于map容器中存储的数据都是成对出现的,因此我们需要使用pair来帮助我们完成存储
这里我们只考虑拷贝构造
int main()
{
//map容器中的数据都是成对出现的,插入的数据必须是对组
mapm;
m.insert(pair("张三", 18));
m.insert(pair("李四", 28));
m.insert(pair("王五", 17));
m.insert(pair("赵二", 32));
Print(m);
cout << "------------" << endl;
//拷贝构造
mapm1(m);
Print(m1);
return 0;
}
使用 = 来帮助我们完成赋值
int main()
{
//map容器中的数据都是成对出现的,插入的数据必须是对组
mapm;
m.insert(pair("张三", 18));
m.insert(pair("李四", 28));
m.insert(pair("王五", 17));
m.insert(pair("赵二", 32));
Print(m);
//赋值拷贝
cout << "------------" << endl;
mapm2;
m2 = m;
Print(m2);
return 0;
}
这里我们使用容器中的size函数,它将返回map容器中的元素个数
void Print(const map& m)
{
for (auto i = m.begin(); i != m.end(); i++)
{
cout << i->first << " " << i->second << endl;
}
}
//大小计算
void test01()
{
mapm1;
for (int i = 0; i < 5; i++)
{
m1.insert(pair(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& m)
{
for (auto i = m.begin(); i != m.end(); i++)
{
cout << i->first << " " << i->second << endl;
}
}
//交换操作
void test02()
{
mapm1;
for (int i = 0; i < 5; i++)
{
m1.insert(pair(i, i));
}
Print(m1);
mapm2;
for (int i = 0; i < 3; i++)
{
m2.insert(pair(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(1, 10));
第二种
m.insert(make_pair(2, 20));
第三种
m.insert(map::value_type(3, 30));
第四种
m[4] = 40;
添加后的结果:
因为map容器会将插入的值根据键值来进行排序,因为我们只考虑插入的方式即可,不考虑插入位置等
void Print(const map& m)
{
for (auto i = m.begin(); i != m.end(); i++)
{
cout <<"key = "<< i->first << " value = " << i->second << endl;
}
}
void test01()
{
mapm;
//第一种
m.insert(pair(1, 10));
//第二种
m.insert(make_pair(2, 20));
//第三种
m.insert(map::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()
{
mapm;
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()
{
mapm;
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;
}
运行结果如下: