list
list(双向链表),除了第一个和最后一个元素外,每个元素都与前后的元素相连接,这意味着可以双向遍历链表,list和vector之间关键区别在于,list在链表中任一位置进行插入和删除的时间都是固定的(vector模版提供了除结尾处外的线性时间的插入和删除,在结尾处,它提供了固定时间的插入和删除)。因此,vector强调的是通过随机访问快速访问,而list强调的是元素的快速插入和删除。list也可以反转容器,list不支持数组表示法和随机访问。list是一个双向链表,而单链表对应的容器则是foward_list。
list的头文件
#include < list>
值得注意的是,list容器不能调用algorithm下的sort函数进行排序,因为sort函数要求容器必须可以随机存储,而list做不到。
map
map运用了哈希表地址映射的思想,也就是key-value的思想,来实现的。内部元素按照key哈希排序。首先给出map最好用也最最常用的用法例子,就是用字符串作为key去查询操作对应的value。
注意:在查找一个不存在的key的时候,map会自动生成这个key,这里涉及到如何安全和挑选符合自己业务逻辑的关联容器格外重要。
头文件
#include< map>
//
// main.cpp
// set
#include < iostream>
#include < string>
#include < map>
using namespace std;
void showmap(map<string, int> v)
{
for (map<string, int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << it->first << " " << it->second << endl; //注意用法,不是用*it来访问了。first表示的是key,second存的是value
}
cout << endl;
}
int main(int argc, const char *argv[]) {
map<string, int> m1; ///<里的第一个参数表示key的类型,第二个参数表示value的类型
m1["year"] = 2018;
m1["month"] = 8;
m1["day"] = 10;
string s("month");
m1[s] = 7;
cout << m1["year"] << endl;
cout << m1["month"] << endl;
cout << m1["day"] << endl; //不存在这个key,就显示0,并在map中创建没有的key
m1.erase("minute");//通过关键字来删除
showmap(m1);
m1.insert(pair<string, int>("second", 52)); //也可以通过insert函数来实现增加元素
showmap(m1);
m1.clear(); //清空全部
return 0;
}