std::unordered_set 详解
时间: 2023-11-11 14:48:54 浏览: 51
std::unordered_set是C++ STL中的一个关联容器,它是一个无序的集合,其中的元素没有按照特定的顺序进行排列。std::unordered_set可以存储各种类型的元素,并且每个元素都是唯一的。它的内部实现是使用哈希表来存储元素,因此可以通过键值直接快速访问各个元素。
使用std::unordered_set时,需要提供一个哈希函数,用于计算元素的哈希值。默认情况下,std::unordered_set使用std::hash作为哈希函数,但也可以自定义哈希函数。同时,还需要提供一个相等比较函数,用于比较两个元素是否相等,默认情况下,std::unordered_set使用std::equal_to进行相等比较。
std::unordered_set提供了以下成员函数:
- insert:向集合中插入一个元素。
- erase:从集合中删除一个元素。
- size:返回集合中元素的个数。
- empty:判断集合是否为空。
- find:查找集合中是否存在某个元素。
- clear:清空集合中的所有元素。
使用std::unordered_set时,需要包含头文件<unordered_set>。
相关问题
std::unordered_set如何删除元素
std::unordered_set是C++标准库中的一个容器,它是一个无序的集合,其中的元素是唯一的。要删除std::unordered_set中的元素,可以使用成员函数erase()。
erase()函数有多种用法,可以根据需要选择适合的方式来删除元素。以下是几种常见的用法:
1. 删除指定元素:
可以使用erase()函数来删除指定的元素。需要传入要删除的元素作为参数。如果元素存在于集合中,则会被删除;如果不存在,则不会有任何影响。
示例代码:
```
std::unordered_set<int> mySet = {1, 2, 3, 4, 5};
mySet.erase(3); // 删除元素3
```
2. 删除满足条件的元素:
可以使用erase()函数结合lambda表达式来删除满足特定条件的元素。lambda表达式可以用于指定删除条件。
示例代码:
```
std::unordered_set<int> mySet = {1, 2, 3, 4, 5};
mySet.erase(std::remove_if(mySet.begin(), mySet.end(), [](int num) { return num % 2 == 0; }), mySet.end()); // 删除所有偶数
```
3. 删除一定范围内的元素:
可以使用erase()函数结合迭代器来删除指定范围内的元素。需要传入要删除的起始迭代器和终止迭代器作为参数。
示例代码:
```
std::unordered_set<int> mySet = {1, 2, 3, 4, 5};
auto it = mySet.find(2); // 找到元素2的迭代器
mySet.erase(it, mySet.end()); // 删除元素2及其后面的所有元素
```
std::unordered_map插入
std::unordered_map是C++标准库中的一个关联容器,它提供了一种键值对的映射关系。插入操作是向unordered_map中添加新的键值对。
要向std::unordered_map中插入元素,可以使用insert()函数或者[]操作符。下面是两种插入元素的方式:
1. 使用insert()函数:
```cpp
std::unordered_map<KeyType, ValueType> myMap;
myMap.insert(std::make_pair(key, value));
```
这里的KeyType是键的类型,ValueType是值的类型。通过std::make_pair()函数创建一个键值对,然后使用insert()函数将其插入到unordered_map中。
2. 使用[]操作符:
```cpp
std::unordered_map<KeyType, ValueType> myMap;
myMap[key] = value;
```
这种方式更简洁,直接使用[]操作符将键和值赋给unordered_map。
需要注意的是,如果插入的键已经存在于unordered_map中,那么插入操作将不会生效,即不会覆盖原有的值。