C C++最全C++STL之unordered_set简单使用_c++ unordered_set的内存使用,2024年最新高级C C++面试题

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

| iterator find(const key_type& k) | 查找以值为 key 的元素,如果找到,则返回一个指向该元素的正向迭代器;反之,则返回一个指向容器中最后一个元素之后位置的迭代器(如果 end() 方法返回的迭代器)。 |
| size_type count(const key_type &k) const | 在容器中查找值为 key 的元素的个数。 |
| pair<iterator, iterator> qual_range(const key_type &k) | 返回一个 pair 对象,其包含 2 个迭代器,用于表明当前容器中值为 key 的元素所在的范围。 |
| template <class… Args> pair<iterator, bool> emplace ( Args&&… args ) | 向容器中添加新元素,比 insert() 方法效率高。 |
| template <class… Args> iterator emplace_hint ( const_iterator position, Args&&… args ) | 向容器中添加新元素,效率比 insert() 方法高。 |
| pair<iterator,bool> insert (value_type& val ) | 建议使用emplace()代替 |
| iterator insert ( const_iterator hint, value_type&& val ) | hint,迭代到建议作为插入点的位置。容器可能会使用此值,也可能不会使用此值来优化操作。无论将什么作为hint传递,该元素都将存储在其相应的存储桶中。成员类型const_iterator是正向迭代器类型。 |
| template void insert ( InputIterator first, InputIterator last ) | 指定元素范围的迭代器。范围为[first,last)的元素的副本插入到unordered_set容器中。 模板类型可以是任何类型的输入迭代器。 |
| void insert ( initializer_list<value_type> il ) | 一个initializer_list对象。编译器将根据初始化列表声明器自动构造此类对象。成员类型value_type是容器中包含的元素的类型,在unordered_set中定义为第一个模板参数(Key)的别名。 |
| iterator erase ( const_iterator position ) | position,指向要从unordered_set中删除的单个元素的迭代器。成员类型const_iterator是正向迭代器类型。 |
| size_type erase ( const key_type& k ) | k,要删除的元素的键。成员类型key_type是容器中元素的键的类型,在unordered_set中定义为其第一个模板参数(Key)的别名。 |
| iterator erase ( const_iterator first, const_iterator last ) | 迭代器在unordered_set容器中指定要删除的范围:[first,last)。 请注意,unordered_set容器不遵循任何特定顺序来组织其元素,因此范围删除的效果可能不容易预测。成员类型const_iterator是正向迭代器类型。尽量不用这个函数。 |
| void clear() noexcept | 清空容器,即删除容器中存储的所有元素。 |
| void swap ( unordered_set& set ) | 交换 2 个 unordered_set容器存储的元素,前提是必须保证这 2 个容器的类型完全相等。 |

代码

/*
Project:unordered_set
Date:    2020/09/05
Author:  Frank Yu
*/
#include<iostream>
#include<string>
#include<unordered_set>
using namespace std;
unordered_set<float> us;
unordered_set<float>::iterator it;
//菜单
void menu()
{
	cout << "******1.插入		2.删除******" << endl;
	cout << "******3.查找		4.显示******" << endl;
	cout << "******5.退出					" << endl;
}
//插入
void Insert()
{
	int i, n;float f;
	cout << "请输入要插入几个小数:" << endl;
	cin >> n;
	cout << "请输入" << n << "个小数:" << endl;
	for (i = 0; i<n; i++)
	{
		cin >> f;
		us.emplace(f);
	}
}
//删除
void Delete()
{
	int i, place, flag;
	float ff;
	cout << "******1.删除某个浮点数     2.删除某位置的浮点数******" << endl;
	cout << "******3.全部删除                               ******" << endl;
	cin >> i;
	switch (i)
	{
	case 1: {
		cout << "请输入浮点数:" << endl;
		cin >> ff;
		flag = us.erase(ff);
		if (flag == NULL)cout << "没有这个浮点数,删除失败。" << endl;
		else cout << "删除成功!" << endl;
	}break;
	case 2: {
		cout << "请输入位置(首元素位置为0):" << endl;
		cin >> place;
		if (place<0 || place>us.size())cout << "位置不在范围内。" << endl;
		else
		{
			it = us.begin();
			while (place--)it++;
			us.erase(it);
			cout << "删除成功!" << endl;
		}
	}break;
	case 3:us.clear(); break;
	default:cout << "输入错误!" << endl;
	}

}
//查找
void Find()
{
	float ff;
	cout << "请输入要查找的浮点数:" << endl;
	cin >> ff;
	it = us.find(ff);
	if (it != us.end())
	{
		cout << "找到浮点数:"<<ff<< endl;
	}
	else cout << "没有找到这个浮点数。" << endl;
}
void Display()
{
	cout << "所有浮点数:" << endl;
	for (auto it = us.begin(); it != us.end(); it++)
	{
		cout << *it<< endl;
	}
}
//主函数
int main()
{
	int i;
	while (1)
	{
		menu();
		cout << "请输入菜单号:" << endl;
		cin >> i;
		if (i == 5)break;
		switch (i)
		{
		case 1:Insert(); break;
		case 2:Delete(); break;
		case 3:Find(); break;
		case 4:Display(); break;
		default:cout << "输入错误!" << endl;
		}
	}
	return 0;
}

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

取](https://bbs.csdn.net/topics/618668825)**

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值