set-概述:

  集合Set是一个容器,它其中所包含的元素的值是唯一的。集合中的元素按一定的顺序排列,并被作为集合中的实例。
一个集合通过一个链表来组织,其具体实现采用了红黑树的平衡二叉树的数据结构。
在插入操作和删除操作上比向量(Vector)快,但查找或添加末尾的元素时会有些慢。
 
 

set c

产生一个空的set/multiset,其中不含任何元素

set   c (op)

以op为排序准则,产生一个空的set/multiset

set   c1(c2)

产生某个set/multiset的副本,所有元素均被复制

set   c (beg, end)

以区间[beg;   end]内的元素产生一个set/multiset

set   c (beg, end, op)

以op为排序准则,利用[beg;   end]内的元素生成一个set/multiset

c.~   set ()

销毁所有元素,释放内存

 
 

iterator begin()

iterator end()

返回指向第一个元素的迭代器

返回指向末尾(最后一个元素之后)的迭代器

void   clear()

清空set容器

bool   empty()

如果为空返回true,否则返回false

iterator   insert(TYPE &val   )

插入一个元素,返回新元素的位置

iterator   insert(iterator pos, TYPE &val)

插入一个元素,返回插入元素的位置(pos是一个提示,指出插入操作的搜寻起点。如果提示恰当,可大大加快速度)

void   insert(input_iterator   start, input_iterator   end )

插入[start,   end)之间的元素到容器中

void   erase(iterator pos)

void   erase(iterator start, iterator end)

size_type   erase(const   TYPE &val)

删除pos所指元素

删除[start,   end)之间的元素

删除值为val的元素并返回被删除元素的个数

size_type   count(const   TYPE &val)

查找容器中值为val的元素的个数

iterator   find(const   TYPE &val)

返回一个迭代器指向键值为val的元素,如果没有找到就返回end()

size_type   size()

返回元素的数量

void   swap(set &object)

交换两个链表中的元素

 
 
 
题目练习:
(会陆续添加)
这个题先看一下不用STL的解法:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std; char *a[];
char b[]; int main()
{
while (gets(b) && b[] !='#')
{
int flag = ;
char *p = b;
int i = ;
int num = ;
memset(a, ,sizeof(a));
while ( (a[i] = strtok(p, " ")) != NULL)
{
i ++;
p = NULL;
}
for (int j = ; j<i; j++)
{
num = ;
for (int k = j+; k<i; k++)
{
if (strcmp(a[j],a[k]) == )
num++;
}
if (num != )
flag ++;
}
cout << i-flag<< endl;
}
return ;
}

有人用map解的:

#include<map>
#include<string>
#include<iostream> using namespace std; int main(){
string s;
map<string,int>Map;
while(getline(cin,s)&&s!="#")
{
int a=;
string str;
Map.clear();
int len=s.length();
for(int i=;i<len;i++){
if(s[i]=='#')
break;
str.clear();
while(s[i]>='a'&&s[i]<='z'){
str+=s[i];
i++;
a=;
}
if(a==)
{
Map[str]++;
a=;
}
}
int ans=Map.size();
cout<<ans<<endl;
}
return ;
}

不过, 草滩小恪感觉此题还是用set切, 切的更清晰, 更爽些!

#include<iostream>
#include<string>
#include<sstream>
#include<set>
using namespace std; const int MAXN = ; char line[MAXN]; int main()
{
set<string>s;
while(cin.getline(line, MAXN))
{
if(line[]=='#') break;
s.clear();
stringstream ss(line);
string str;
while(ss>>str)
s.insert(str);
cout<<s.size()<<endl;
}
return ;
}

STL--set的更多相关文章

  1. 详细解说 STL 排序(Sort)

    0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算 ...

  2. STL标准模板库(简介)

    标准模板库(STL,Standard Template Library)是C++标准库的重要组成部分,包含了诸多在计算机科学领域里所常见的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应 ...

  3. STL的std::find和std::find_if

    std::find是用来查找容器元素算法,但是它只能查找容器元素为基本数据类型,如果想要查找类类型,应该使用find_if. 小例子: #include "stdafx.h" #i ...

  4. STL: unordered_map 自定义键值使用

    使用Windows下 RECT 类型做unordered_map 键值 1. Hash 函数 计算自定义类型的hash值. struct hash_RECT { size_t operator()(c ...

  5. C++ STL简述

    前言 最近要找工作,免不得要有一番笔试,今年好像突然就都流行在线笔试了,真是搞的我一塌糊涂.有的公司呢,不支持Python,Java我也不会,C有些数据结构又有些复杂,所以是时候把STL再看一遍了-不 ...

  6. codevs 1285 二叉查找树STL基本用法

    C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...

  7. STL bind1st bind2nd详解

    STL bind1st bind2nd详解   先不要被吓到,其实这两个配接器很简单.首先,他们都在头文件<functional>中定义.其次,bind就是绑定的意思,而1st就代表fir ...

  8. STL sort 函数实现详解

    作者:fengcc 原创作品 转载请注明出处 前几天阿里电话一面,被问到STL中sort函数的实现.以前没有仔细探究过,听人说是快速排序,于是回答说用快速排序实现的,但听电话另一端面试官的声音,感觉不 ...

  9. STL的使用

    Vector:不定长数组 Vector是C++里的不定长数组,相比传统数组vector主要更灵活,便于节省空间,邻接表的实现等.而且它在STL中时间效率也很高效:几乎与数组不相上下. #include ...

  10. [C/C++] C/C++延伸学习系列之STL及Boost库概述

    想要彻底搞懂C++是很难的,或许是不太现实的.但是不积硅步,无以至千里,所以抽时间来坚持学习一点,总结一点,多多锻炼几次,相信总有一天我们会变得"了解"C++. 1. C++标准库 ...

随机推荐

  1. DateTimeUtil 工具类,android 和 java 通用

    import java.sql.Date;import java.text.SimpleDateFormat; public class DateTimeUtil { public final cla ...

  2. JavaEE基础(十)

    1.面向对象(package关键字的概述及作用) A:为什么要有包 将字节码(.class)进行分类存放 包其实就是文件夹 B:包的概述 举例: 学生:增加,删除,修改,查询 老师:增加,删除,修改, ...

  3. 项目管理:CocoaPods建立私有仓库

    CocoaPods是iOS,Mac下优秀的第三方包管理工具,类似于java的maven,给我们项目管理带来了极大的方便. 个人或公司在开发过程中,会积累很多可以复用的代码包,有些我们不想开源,又想像开 ...

  4. 使用System.arraycopy()实现数组之间的复制

    System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制. 其函数原型是: public static void arraycopy(Object src, int s ...

  5. 深入学习netty系列(1)

    一.Server端的编程模型 示例代码1 EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGroup workerGroup ...

  6. 【转】JS 和 java 交互

    android中如何获得webView中的内容发表于 2011 年 06 月 13 日 由 admin本文概要:在程序中经常会用到webView来显示网页,但如果能够得到网页中的内容呢,本文将给你一个 ...

  7. 使用oracle写if判断

    DECLARE L_X INT; BEGIN SELECT COUNT(*) INTO L_X FROM SYSTEMROLEFUNCTION WHERE ROLEID = '1'; IF L_X & ...

  8. Codeforces Round #370 (Div. 2) B

    Description Memory is performing a walk on the two-dimensional plane, starting at the origin. He is ...

  9. 2016年11月11日 星期五 --出埃及记 Exodus 20:2

    2016年11月11日 星期五 --出埃及记 Exodus 20:2 "I am the LORD your God, who brought you out of Egypt, out o ...

  10. django学习の模型

    orm:对象数据库和模型的映射.如果想以简单的方式去操作数据库,例如用类的方式去操作,就像 p = Person.get(id = 1),那么就必须使得代码和数据库的结构具有映射关系,实现这种关系,你 ...