目录
一、链表list
1.基本概念
功能:将数据进行链式存储
链表是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的
链表的组成:由一系列的结点组成。
结点的组成:一个是存储数据元素的数据域,一个是存储下一个结点地址的指针域
优点:可以对任意位置进行快速插入和删除元素
缺点:遍历数据没有数组快,占用空间比数组大
2.构造函数
3.赋值和交换
4.大小操作
5.插入和删除
6.list数据存取
7.反转和排序
二、set/multiset容器
1.基本概念
简介:所有元素在插入时自动被排序
本质:set/multiset属于关联性容器,底层结构由二叉树实现
其中,set不允许有重复的元素,multiset允许有重复的元素。
2.构造和赋值
3.大小和交换
4.插入和删除
5.查找与统计
6.pair对组的创建
三、map/multimap容器
简介:
map中所有元素都是pair
pair中第一个元素为key(键值),第二个元素为value(实值)
所有元素都会根据元素的键值自动排序
本质:
map/multimap属于关联性容器,底层结构为二叉树
优点:
可以根据key值快速找到value值
map和multimap的区别:
map不允许容器中有重复key值元素
multimap允许容器中有重复key值元素
2.构造和赋值
3.大小和交换
4.插入和删除
5.查找与统计
四、STL示例:
#include<iostream>
#include<vector>
#include<string>
#include<map>
#define CEHUA 0
#define MEISHU 1
#define YANFA 2
using namespace std;
class worker
{
public:
string m_Name;
int m_Salary;
};
void createWorker(vector<worker>& v)
{
string nameSeed = "ABCDEFGHIJ";
for (int i = 0; i < 10; i++)
{
worker work;
work.m_Name = "员工";
work.m_Name += nameSeed[i];
work.m_Salary = rand() % 10000 + 10000;
//将员工放回容器中
v.push_back(work);
}
}
void setGroup(vector<worker>& v, multimap<int, worker>& m)
{
for (vector<worker>::iterator it = v.begin(); it != v.end(); it++)
{
//产生随机部门编号
int deptId = rand() % 3;
//将员工插入分组中
m.insert(make_pair(deptId, *it));
}
}
void showWorker(multimap<int,worker>& m)
{
cout << "策划部门" << endl;
multimap<int, worker>::iterator pos = m.find(CEHUA);
int count = m.count(CEHUA);
int index = 0;
for (; pos != m.end() && index < count; pos++, index++)
{
cout << "姓名: " << pos->second.m_Name << "工资" << pos->second.m_Salary << endl;
}
cout << "美术部门" << endl;
pos = m.find(MEISHU);
count = m.count(MEISHU);
index = 0;
for (; pos != m.end() && index < count; pos++, index++)
{
cout << "姓名: " << pos->second.m_Name << "工资" << pos->second.m_Salary << endl;
}
cout << "研发部门" << endl;
pos = m.find(YANFA);
count = m.count(YANFA);
index = 0;
for (; pos != m.end() && index < count; pos++, index++)
{
cout << "姓名:" << pos->second.m_Name << "工资:" << pos->second.m_Salary << endl;
}
}
int main()
{
//1.创建员工
vector<worker>w;
createWorker(w);
//2.员工分组
multimap<int, worker>m_worker;
setGroup(w, m_worker);
//3.展示员工
showWorker(m_worker);
system("pause");
return 0;
}
结果示例: