赞
踩
set
为关联式容器,翻译为集合,其中的元素类型为 pair
,需要注意 set
容器存储的各个键值对,要求键 key
和值 value
必须相等
基于 set
容器的这种特性,当使用 set
容器存储键值对时,只需要为其提供各键值对中的 value
值(也就是 key
的值)即可。
{<'a', 'a'>, <'b', 'b'>, <'c', 'c'>}
// 当要使用set容器存储上面这种键值对时,就可以转换成这样
{'a','b','c'}
set
容器会自行根据键的大小对存储的键值对进行排序,因为 set
容器中各键值对的键 key
和值 value
是相等的,根据 key
排序,也就等价为根据 value
排序。
set
中元素没有重复值set
容器中的元素按照升序排列#include <set>
set<int> set2(set1);
set<int> set1 = {1, 2, 3};
vector<int> v = {1, 2, 3, 4};
set<int> s(v.begin(), v.end());
不支持通过 索引 遍历
void PrintfVector(set<int> s)
{
// 注:如果参数为const set<int> 需要用const_iterator
// set<int>::const_iterator iter=s.begin();
for(set<int>::iterator it = s.begin(); it != s.end(); ++it)
{
cout<<(*it)<<" ";
}
cout<<endl;
}
void PrintfSet(set<int> s)
{
// 注:如果参数为const set<int> 需要用const_iterator
// set<int>::const_iterator iter=s.begin();
for(auto it = s.begin(); it != s.end(); ++it)
{
cout<<(*it)<<" ";
}
cout<<endl;
}
void PrintfSet(set<int> s)
{
// 注:如果参数为const vector<int> 需要用const_iterator
// vector<int>::const_iterator iter=v.begin();
for(auto key : s)
{
cout<<( key )<<" ";
}
cout<<endl;
}
for_each(iterator beg, iterator end, _callback);
set<int> s = {3,5,1,7,10}; // vector容器
auto print = [](const auto& x) // 定义一个lambda表达式
{
cout << x << ",";
};
for_each(cbegin(v), cend(v), print);// for_each算法
for_each( // for_each算法,内部定义lambda表达式
cbegin(v), cend(v), // 获取常量迭代器
[](const auto& x) // 匿名lambda表达式
{
cout << x << ",";
}
);
在 set
中,迭代器只支持 ++
和 –-
操作
方法 | 说明 |
---|---|
begin() | 返回指向容器中第一个(注意,是已排好序的第一个)元素的双向迭代器。如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。 |
end() | 返回指向容器最后一个元素(注意,是已排好序的最后一个)所在位置后一个位置的双向迭代器,通常和 begin() 结合使用。如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。 |
rbegin() | 返回指向最后一个(注意,是已排好序的最后一个)元素的反向双向迭代器。如果 set 容器用 const 限定,则该方法返回的是 const 类型的反向双向迭代器。 |
rend() | 返回指向第一个(注意,是已排好序的第一个)元素所在位置前一个位置的反向双向迭代器。通常和 rbegin() 结合使用。如果 set 容器用 const 限定,则该方法返回的是 const 类型的反向双向迭代器。 |
cbegin() | 和 begin() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的元素值。 |
cend() | 和 end() 功能相同,只不过在其基础上,增加了 const 属性,不能用于修改容器内存储的元素值。 |
find(val) | 在 set 容器中查找值为 val 的元素,如果成功找到,则返回指向该元素的双向迭代器;反之,则返回和 end() 方法一样的迭代器。另外,如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。 |
count(val) | 在 set 容器中查找值为 val 元素的数量,由于set 中没有重复 key,所以其返回结果为 0/1 |
lower_bound(val) | 返回一个指向当前 set 容器中第一个大于或等于 val 的元素的双向迭代器。如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。 |
upper_bound(val) | 返回一个指向当前 set 容器中第一个大于 val 的元素的迭代器。如果 set 容器用 const 限定,则该方法返回的是 const 类型的双向迭代器。 |
size() | 返回 set 容器中元素数量 |
insert(key) | 在 set 容器中插入元素 key,set 容器会自动进行排序 |
erase(key) | 在 set 容器中删除元素 key |
clear(key) | 删除 set 容器中所有元素 |
s.size()
返回 set s
的元素个数
s.insert(key)
将元素 key 插入到 s 中s.insert(v.begin(), v.end())
将 v 中元素插入到 s 中s.insert( {key1, key2, key3} )
插入多个元素set<int> s = {1, 2, 3};
vector<int> v = {4, 5, 6};
s.insert(7);
s.insert(v.begin(), v.end()-1); // 插入 4 5
s.insert({8, 9}); // 插入 8 9
s.erase(key)
删除值为 key 的元素s.erase(s.begin(), s.end())
删除 迭代器区间 的元素set<int> s = {1, 2, 3, 4, 5, 6};
s.erase(6);
set<int>::iterator it = s.begin();
set<int>::iterator it1 = s.end();
it++;
it1--;
s.erase(it, it1 ); // s: 1 5
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。