在讲述map容器之前先来说一下序列式容器,序列式容器是存放数据的一个绝佳的地方,但是其也存在一定的缺陷,就是它的访问机制并不高效,这样就出现了后续的关联式容器
关联式容器分为map,multimap,set multiset这几种
首先先来说一下map容器:
map里面存放的一个元素分为两个部分一个为key,一个为value用key作为索引目录,来索引value。
map共有四种类型:
1.map<K,T>保存的是pair<cosnt K,T>的元素,pair<const K,T>封装了一对键对象,键的类型为K,对象的类型为T,每个键都是唯一的,所以不允许有重复的键,默认使用less来进行排序。
2.multimap<K,T>和map类似,其键值也必须是可比较的,也会按照一定顺序排列,但是其一个键值K可以对应多个对象。
3.unordered_map<K,T>和map不一样,它的顺序并不是按照键值大小决定的,而是由键值的哈希值决定的。unordered_map<K,T>不允许有一个重复的键。
4.unordered_multimap<K,T>也是通过键值生成的哈希值来确定对象,但它一个键值可以对应多个对象。
#include<iostream>
#include<map>
#include<string>
#include<utility>
using std::string;
using std::map;
using std::cout;
using std::endl;
int main()
{
map<int,string>m1;//使用默认构造函数
m1[75] = "John Smith";
m1[51] = "Bill Hook";
m1[41] = "Ann Gora";
m1[21] = "Jane Johnes";
cout << "m1:" << endl;
for (map<int, string>::iterator it = m1.begin(); it != m1.end(); it++)
{
cout << it->first << " "<<it->second << endl;
}
map<int, string> m2{ std::make_pair(12, "John Smith"), std::make_pair(11, "Bill Hook"), std::make_pair(14, "Ann Gora"),
std::make_pair(24, "Jane Johnes") };//默认在构造函数时赋值
cout << "m2:" << endl;
for (map<int, string>::iterator it = m2.begin(); it != m2.end(); it++)
{
cout << it->first << " " << it->second << endl;
}
//map的插入方式
//1.使用insert插入
m1.insert(std::make_pair(11, "hello"));
auto pr = std::make_pair(12, "hello");
m1.insert(pr);
//2.在mmake_pair中定插入的类型
m1.insert(std::make_pair<int, string>(1,string("hello1")));
map<int, string>::iterator mit;
mit = m1.begin();
mit->second = "Jone";
m1.erase(1);//map容器的删除。
cout << "m1:" << endl;
for (map<int, string>::iterator it = m1.begin(); it != m1.end(); it++)
{
cout << it->first << " " << it->second << endl;
}
system("pause");
return 0;
}
//1、通过组(pair)的方式进行插入,pair不是map里面的结构,是std里面的一个模板
m.insert(std::pair<int, double>(4, 0.33));
//2、通过map内部定义的一个结构来进行插入
m.insert(map<int, double>::value_type(4, 0.21));
//3、通过std里面的一个函数模板来进行元素的插入
m.insert(std::make_pair(7, 0.098));
set和map的内存结构是一致的,如果有一个值既是key,也可以是value,就用set
使用计算机来解决实际问题,分析问题所涉及的数据、合理的组织这些数据,规划解决问题的算法
算法:解决问题的具体流程
空间复杂度,时间复杂度
空间复杂度:指令空间、数据空间、环境栈空间
时间复杂度:运行时间