#include<iostream>
using namespace std;
#include"map" //map的头文件
#include"string" //string的头文件
//map是一个键值对序列。即(key,value)对,提供基于key的快速检索能力
//map是关联式容器 key值唯一 按照顺序插入 不可以按照位置插入
//map的具体实现采用红黑树变体的平衡二叉树的数据结构。在插入操作和删除操作上比vector快。
//map可以直接存取key所对应的value,支持[]操作符,如map[key]=value。
// multimap与map的区别:map支持唯一键值,每个键只能出现一次;而multimap中相同键可以出现多次,multimap不支持[]操作符
// #include <map>
// 验证是否插入成功 在今后的项目开发当中一定不要省略 注意追踪插入函数的源代码 注意他的返回值
//函数三要素 名称 参数 返回值 一定要注意返回值 然后进行一些异常处理
//map的基本操作
void main1101()
{
//初始化 多种方法 涉及到两种数值的插入 key以及value值
//方法一
map<int, string> m1;
pair<int, string> mypair(1, "teacher1");
m1.insert(mypair);
//方法二
m1.insert(make_pair(2, "teacher2"));
//方法三
m1.insert(map<int, string>::value_type(3, "teacher3"));
//方法四
m1[4] = "teacher4"; //4相当于key值 后面为value值
for (map<int, string>::iterator it = m1.begin(); it != m1.end(); it++)
{
cout << it->first << " "<<it->second<<endl;
}
//涉及到map元素的删除
cout << m1.size() << endl;
while (!m1.empty())
{
map<int, string>::iterator it1 = m1.begin();
cout << it1->first << " " << it1->second << endl;
m1.erase(it1); //同时还可以根据元素删除,与之前容器相类似的区间删除
}
cout << m1.size() << endl;
}
//比较不同的插入方法的异同 初始化方法的异同
void main1102()
{
/*总结*/
//1 前三种方法返回的都是一个对组 pair<iterator,bool> 如果key本身存在 就会根据pair.second 来报错
// 使用=操作符的时候 如果key本身存在,就会将最后一次的赋值给覆盖之前的赋值
//源代码中的宏定义 typedef pair<iterator, bool> _Pairib;
//方法一
map<int, string> m1;
pair<int, string> mypair(1, "teacher1");
pair<map<int, string>::iterator, bool> mypair1 = m1.insert(mypair); //使用mypair1来接收insert的返回值
//验证是否插入成功 在今后的项目开发当中一定不要省略
if (mypair1.second)
{
cout << mypair1.first->second << "插入成功" << endl;
}
else
{
cout << mypair1.first->second << "插入失败" << endl;
}
pair<map<int, string>::iterator, bool> mypair2 = m1.insert(pair<int, string>(1,"t1")); //使用mypair2来接收insert的返回值
if (mypair2.second)
{
cout << mypair2.first->second << "插入成功" << endl;
}
else
{
cout << mypair2.first->second << "插入失败" << endl;
}
//方法二
m1.insert(make_pair(2, "teacher2"));
//方法三
m1.insert(map<int, string>::value_type(3, "teacher3"));
//方法四
m1[4] = "teacher4"; //4相当于key值 后面为value值
for (map<int, string>::iterator it = m1.begin(); it != m1.end(); it++)
{
cout << it->first << " " << it->second << endl;
}
}
//涉及到map的查找
void main1103()
{
map<int, string> m1;
//插入
m1.insert(make_pair(1, "teacher1"));
m1.insert(make_pair(2, "teacher2"));
m1.insert(make_pair(3, "teacher3"));
m1.insert(make_pair(4, "teacher4"));
m1.insert(make_pair(5, "teacher5"));
m1.insert(make_pair(6, "teacher6"));
//遍历
for (map<int, string>::iterator it = m1.begin(); it != m1.end(); it++)
{
cout << it->first << " " << it->second << endl;
}
//find查找 并且进行异常处理
map<int, string>::iterator myit1 = m1.find(10);
if (myit1 == m1.end())
{
cout << "元素10查找失败" << endl;
}
else
{
cout << "该元素的位置在" << myit1->first << endl;
}
//equal_range 查找 并且进行异常处理
pair<map<int, string>::iterator,map<int, string>::iterator> myit2 = m1.equal_range(6);
if (myit2.first == m1.end())
{
cout << "没有数大于等于6" << endl;
}
else
{
cout << myit2.first->first << endl;
}
if (myit2.second == m1.end())
{
cout << "没有数大于6" << endl;
}
else
{
cout << myit2.second->first << endl;
}
}
int main()
{
//main1101();//map的基本操作
//main1102(); //比较不同的插入方法的异同 初始化方法的异同
main1103();//涉及到map的查找
system("pause");
return 0;
}
C++ 涉及到STL 中 map与multimap的基本操作 以及相应的区别 20180325day13
最新推荐文章于 2023-12-21 21:13:05 发布