c++之关联容器-set

set容器,根据平衡二叉树(红黑树)结构,进行的设计。默认按顺序存储,每个元素只包含一个关键字,且无重复,适合高效查找。
unordered_set是无序存储,由哈希函数组织得到。
当只是想知道某个值是否存在时,set是最有用的。

定义及初始化

set<string> st = {"the", "but", "and",
                  "The", "But", "And"};

//or
vector<string> vec(10,"abc");
set<string> i_st(vec.begin(), vec.end());
//使用一个数组初始化set,可能数组10个元素,set只有5个元素。因为去重了

//or
set<string> i_st;
i_st.insert(vec.begin(), vec.end());

常用操作

1.迭代器类型为const,所以可以用一个迭代器访问set元素,不能修改。

set<int> iset={0,1,2,3,4,5,6,7,8,9};
set<int>::iterater it=iset.begin();  //定义一个迭代器
while(it!=iset.end())
   cout<<*it<<endl; //正确,且输出的是有序的。证明插入无序,输出有序
   *it = 42;        //错误,不能修改值
  1. 判空、大小
bool n = i_st.empty();
int m = i_st.size();
  1. 添加、删除、清空元素
//insert插入一个元素,若还需看是否插入成功,看返回值的第二成员即可
i_st.insert(p);          //单纯插入

auto it=i_st.insert(p);  //it保存返回的pair类型
if(it.second)      //返回pair的第二成员是bool,true代表插入成功

i_st.erase(it);        //删除it指向的元素,返回下一元素的迭代器
i_st.erase(val);       //删除值为val的元素
i_st.erase(it1, it2);  //删除区间内的元素,返回下一元素的迭代器

i_st.clear();          //清空set
  1. 查找元素
i_st.find(ele);   //找到了,返回迭代器指向key==ele的元素
                  //找不到,返回i_st.end()
i_st.count(ele);  //返回0或1,相当于是否存在

示例实现

输入一段话,统计除常见单次外,其他单词出现的次数

map<string, int> i_mp;
set<string> i_st = {"the", "but", "and",
                  "The", "But", "And"};  //常见词,需排除
string str;
while(cin>>str)
   if(i_st.find() == i_st.end())   //没在常用单词表里找到该单词str
       ++i_mp[str];   //若map里有该单词,count+1;没有该单词就自动插入一个
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值