C++11:关联式容器:unordered_set

unordered_set是C++中的一种无序容器,基于散列实现,提供快速的元素查找。元素值唯一且不可变,内部通过键的散列值组织成桶。主要接口包括insert用于插入元素,find用于查找元素,erase用于删除元素。这些操作在平均情况下具有O(1)的时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.unordered_set 特性​编辑

2.常用接口的使用

1.insert

 2.find

 3.erase


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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值