C++中set的使用
何为set
set
是STL
中的一种关联容器,里面的元素根据关键字存储。set
的元素都是唯一的,没有重复元素,我们可以利用这个特点进行去重的操作;
set中常用的方法
函数名 | 作用 |
---|---|
clear | 清除内容 |
insert | 插入元素或节点 |
emplace | 原位构造元素 |
erase | 移除元素 |
swap | 交换内容 |
count | 返回匹配特定键的数量,可以用于判断元素是否存在 |
find | 查找特定元素 |
contains | 检查是否包含特定元素,C++20才有 |
lower_bound | 返回第一个不小于给定键的元素的迭代器 |
upper_bound | 返回第一个大于给定键的元素的迭代器 |
示例程序
void TestSet()
{
// use constructor
std::set<std::string> name;
name.insert("Alex");
name.insert("Alice");
// delete duplicate element
name.insert("Alex");
std::cout << "size of name is " << name.size() << std::endl;
for (std::string val : name)
std::cout << val << "\t";
std::cout << std::endl;
// use erase to remove some element
std::set<int> nums = { 1,2,3,4,5,6,7,8,9,10 };
std::set<int> copynums(nums.find(4), nums.end());
for (auto itr = nums.begin(); itr != nums.end(); )
{
if (*itr % 2 == 0)
{
itr = nums.erase(itr);
}
else
{
++itr;
}
}
for (const auto& val : nums)
{
std::cout << val << "\t";
}
std::cout << std::endl;
copynums.erase(copynums.find(7), copynums.end());
for (const auto& val : copynums)
{
std::cout << val << "\t";
}
std::cout << std::endl;
std::cout << copynums.count(4) << std::endl;
// checks if there is an element in the container and contains func exist in C++20 version
/*if (money.contains(100))
{
std::cout << "100 is in this container" << std::endl;
}
else
{
std::cout << "100 is not in this container" << std::endl;
}*/
}
程序输出结果
size of name is 2
Alex Alice
1 3 5 7 9
4 5 6
1