STL的应用-2.17

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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值