网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事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;
}
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
取](https://bbs.csdn.net/topics/618668825)**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!