目录
1.unordered_set 特性
1. unordered_set是一种容器,它存储的元素没有特定的顺序,允许根据元素的值快速获取单个元素。
2.在unordered_set中,一个元素的值与它的键同时存在,从而唯一地标识它。键是不可变的,因此unordered_set中的元素一旦进入容器就不能被修改——但它们可以被插入和删除。
3.在内部,unordered_set中的元素没有按任何特定的顺序排序,而是根据它们的散列(hash)值组织成桶,以允许直接通过值快速访问各个元素(平均时间复杂度是O(1))。
4.在通过键访问单个元素时,Unordered_set容器比set容器更快,尽管在通过元素子集进行范围迭代时通常效率较低。
2.常用接口的使用
1.insert
在unordered_set中插入新元素,每个元素只有在不等于容器中已有的任何其他元素时才会被插入(unordered_set中的元素具有唯一的值)。
[first,last):范围包含first和last之间的所有元素,包括first指向的元素,但不包括last指向的元素。
该函数返回一个迭代器,该迭代器要么指向容器中新插入的元素,要么指向键值相等的元素。
// unordered_set::insert
#include <iostream>
#include <string>
#include <array>
#include <unordered_set>
using namespace std;
int main()
{
unordered_set<string> myset = { "yellow","green","blue" };
array<string, 2> myarray = { "black","white" };
string mystring = "red";
myset.insert(mystring);
myset.insert(mystring + "dish");
myset.insert(myarray.begin(), myarray.end());
myset.insert({ "purple","orange" });
cout << "myset contains:";
for (const string& x : myset)
cout << " " << x;
cout << endl;
return 0;
}
2.find
在容器中搜索值为k的元素,如果找到则返回指向该元素的迭代器,否则返回指向unordered_set::end(容器末尾之后的元素)的迭代器。
// unordered_set::find
#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;
int main()
{
unordered_set<string> myset = { "red","green","blue" };
string input;
cout << "color? ";
getline(cin, input);
unordered_set<string>::const_iterator got = myset.find(input);
if (got == myset.end())
cout << "not found in myset";
else
cout << *got << " is in myset";
cout << endl;
return 0;
}
3.erase
从unordered_set容器中删除单个元素或一组元素[first,last)。
返回一个迭代器,指向最后一个被删除的元素之后的位置。
// unordered_set::erase
#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;
int main()
{
unordered_set<string> myset = { "USA","Canada","France","UK","Japan","Germany","Italy" };
myset.erase(myset.begin());
myset.erase("France");
myset.erase(myset.find("Japan"), myset.end());
cout << "myset contains:";
for (const string& x : myset)
cout << " " << x;
cout << endl;
return 0;
}