List 的定义的结构
下面是一个例子
#include <iostream>
#include <list>
using namespace std;
int main()
{
//创建一个list容器
list<int> myList;
//在链表尾部插入元素
myList.push_back(1);
myList.push_back(2);
myList.push_back(3);
//在链表尾部插入元素
myList.push_front(0);
//遍历链表并输出
for (int num : myList)
{
cout << num << " ";
}
cout << endl;
return 0;
}
List 的常用函数
push_back():将元素插入到链表末尾
push_front():将元素插入到链表的开头
pop_back():移除链表末尾的元素
pop_front():移除链表开头的元素
size():返回链表中的元素个数
empty():检查链表的是否为空
clear():清空链表中的所有元素
front():返回链表中第一个元素的引用
back():返回链表中最后一个元素的引用
begin():返回指向链表第一个元素的迭代器
end():返回指向链表末尾的下一个位置的迭代器
insert():在指定位置之前插入一个或多个元素
erase():从链表中移除指定位置的一个或多个元素
代码示例
#include <iostream>
#include <list>
using namespace std;
int main()
{
//创建一个list<int>对象myList;
list <int> myList;
//向myList尾部添加元素
for (int i = 1; i <= 5; ++i)
{
myList.push_back(i);
}
//从头到尾输出myList中的元素
for (const auto& i : myList) cout << i << ' ';
cout << '\n';
//将myList的元素反转
reverse(myList.begin(), myList.end());
for (const auto& i : myList) cout << i << ' ';
cout << '\n';
//在第一个元素的后一个位置加上元素0
myList.insert(++myList.begin(), 0);
for (const auto& i : myList) cout << i << ' ';
cout << '\n';
//移除元素,左闭右开
myList.erase(++++myList.begin(), --myList.end());
//输出链表的大小
cout << "链表的大小为:" << myList.size() << '\n';
for (const auto& i : myList) cout << i << ' ';
cout << '\n';
return 0;
}
map的使用
map的定义
map<int ,int> mp;
map是一种关联容器,用于存储一组键值对(key-value pairs),其中每个键(key)都是唯一的。
map容器根据键来自动排序,并且可以通过键快速查找对应的值。
map的函数:
insert():插入元素 O(log n)
erase():删除元素 O(log n)
find():查找元素 O(log n)
count():统计元素个数(更多的是判断key是否存在) O (log n)
size():返回元素个数 O(1)
begin():返回指向容器起始位置的迭代器 O(1)
end():返回指向容器末尾位置的迭代器 O(1)
clear():清空容器 O(1)
empty():判断容器是否为空 O(1)
lower_bound ():返回指向第一个不小于指定键的元素位置 O(log n)
upper_bound():返回指向第一个大于指定键的元素位置 O(log n)
用法:
mp.lower_bound(2);
multimap
multimap是一种关联容器,类似于map;但允许存储多个相同键的键值对(与map唯一的不同)
在实际做题中几乎用不到。
erase():删除时,需要指定,因为它允许存储多个相同的键值对,不指定元素位置,会全部删除
unordered_ map
unordered_map是一种关联容器,用于存储一组键值对,其中每个键都是唯一的。
与map 和multimap不同,unordered_map不会根据键的顺序进行排序,而是使用哈希函数将键映射到存储桶中。
这使得unordered_map具有更快的插入、删除和查找操作的时间复杂度,但不保证元素的顺序。
具有较好的平均时间复杂度和极差的最坏时间复杂度,时间复杂度不稳定。一般情况下,更愿意使用时间复杂度稳定的map。
代码示例
map:
#include <iostream>
#include <map>
using namespace std;
int main()
{
//创建并初始化map
map<int, string> myMap = { {1,"Apple"}, {2,"Banana"},{3,"Orange"} };
//插入元素
myMap.insert(make_pair(4, "Grapes"));
//查找和访问元素
cout << "Value at Key 2" << myMap[2] << endl;
//遍历并打印map中的元素
for (const auto& pair : myMap)
cout << "Key:" << pair.first << ",Value:" << pair.second << endl;
//删除元素
myMap.erase(3);
//判断元素是否存在
if (myMap.count(3) == 0)
cout << "Key 3 not found." << endl;
//清空 map
myMap.clear();
//
if (myMap.empty())
cout << "Map is empty." << endl;
return 0;
}
multimap:
#include <iostream>
#include <map>
using namespace std;
int main()
{
//创建并初始化multimap
multimap<int, string> myMultimap = { {1,"Apple"}, {2,"Banana"},{2,"Orange"} };//可传入相同
//插入元素
myMultimap.insert(make_pair(3, "Grapes"));
//查找和访问元素
auto range = myMultimap.equal_range(2);
for (auto it = range.first; it != range.second; ++it)
{
cout << "Key:" << it->first << ",Value" << it->second << endl;
}
//遍历并打印myMultimap中的元素
for (const auto& pair : myMultimap)
cout << "Key:" << pair.first << ",Value:" << pair.second << endl;
//删除元素
myMultimap.erase(2);
//判断元素是否存在
if (myMultimap.count(2) == 0)
cout << "Key 2 not found." << endl;
//清空 myMultimap
myMultimap.clear();
//
if (myMultimap.empty())
cout << "myMultimap is empty." << endl;
return 0;
}
unordered_map:
#include <iostream>
#include <unordered_map>
using namespace std;
int main()
{
//创建并初始化unordered_map
unordered_map <string, int > myMap = { {"Apple",3},{"Banana",5}, {"Orange",2}};
//插入元素
myMap.insert(make_pair("Grapes", 4));
//查找和访问元素
cout << "Value for key 'Banana' :" << myMap["Banana"] << endl;
//遍历打印
for (const auto& pair : myMap)
{
cout << "Key:" << pair.first << ",:Value" << pair.second << endl;
}
//删除元素
myMap.erase("Orange");
//判断元素是否存在
if (myMap.count("Orange") == 0)
{
cout << "Key 'Orange' not found." << endl;
}
//清空unordered_map
myMap.clear();
//判断是否为空
if (myMap.empty())
{
cout << "unordered_map is empty" << endl;
}
return 0;
}