set容器

set容器

中文名 set容器
属性 关联容器
目录导航

简介

set是C++标准库中的一种关联容器。所谓关联容器就是通过键(key)来读取和修改元素。与map关联容器不同,它只是单纯键的集合。

特性

set容器的每一个键只能对应一个元素,即不存在键相同的不同元素。

示例代码:

#include

#include

#include

int main(int argc, char* argv[]) {

std::vectorvec;

for(std::vector::size_type i = 0; i < 10; ++i) {

vec.push_back(i);

vec.push_back(i);

}

std::cout<< "vector : " << std::endl;

for(std::vector::iterator it = vec.begin(); it != vec.end(); ++it) {

std::cout<< *it << ",";

}

std::cout<< std::endl;

std::setst(vec.begin(), vec.end());

std::cout<< "set : " << std::endl;

for(std::set::iterator it = st.begin(); it != st.end(); ++it) {

std::cout<< *it << ",";

}

std::cout<< std::endl;

return 0;

}

输出结果:

vector :

0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9

set :

0,1,2,3,4,5,6,7,8,9

创建了一个int型的vector容器,存储20个数据,0~9每个数字都出现了两次。用整个vector初始化一个int型set容器,这个set容器却只有10个元素,0~9每个数字只出现一次。证实了set容器的每一个键只能对应一个元素。

添加元素

可以使用insert操作向set容器添加元素。

示例代码:

#include

#include

#include

int main(int argc, char* argv[]) {

std::vectorvec;

vec.push_back(1);

vec.push_back(2);

std::setst;

st.insert(10);

st.insert(vec.begin(),vec.end());

std::cout<< "set : ";

for(std::set::iterator it = st.begin(); it != st.end(); ++it) {

std::cout<< *it << " ";

}

std::cout<< std::endl;

return 0;

}

输出结果:

set : 1 2 10

insert()的参数既可以是一个键,也可以是一对迭代器,它们都可以实现向set容器中添加元素,只不过函数的返回值不同。另外,可以看出向set容器中添加元素后,它会自动排序。

获取元素

与map容器不同,set容器不支持下标操作访问元素。

使用count()函数可以查询元素是否存在,如果查询的元素存在则返回1,反之则0。使用find()函数,如果查询的元素存在则返回指向该元素的迭代器,反之则返回超出末端迭代器。

示例代码:

#include

#include

int main(int argc, char* argv[]) {

std::set st;

st.insert(1);

st.insert(5);

st.insert(10);

std::cout<< "count(5) : " << st.count(5) << std::endl;

std::cout<< "find(5): " << *st.find(5) << std::endl;

return 0;

}

输出结果:

count(5) : 1

find(5): 5

使用count()和find()函数查询同一元素5,count()函数返回的是该元素在set容器中的数量,find()函数则返回指向该元素的迭代器。需要注意的是,虽然使用find()函数可以返回指向该元素的迭代器,但只能对其做读操作,任何试图修改键值的操作都是非法的。

相关百科
返回顶部
产品求购 求购