set提供一个不重复元素的集合,一般不能直接修改元素。因为这样可能会造成重复元素
因此必须删除旧元素,再插入新元素。
看下面程序:分析每句的功能。
#include<set>
#include<iostream>
using namespace std;
int main()
{
 set<int> s;//1
 s.insert(9);
 s.insert(3);
 s.insert(5);
 s.insert(7);
 s.insert(1);
 set<int>::const_iterator iter;
 for(iter = s.begin(); iter != s.end(); iter++)
 {
  cout<<*iter<<endl;
  const_cast<int&>(*iter)= 1; //a
 }
 cout<<"after"<<endl;
 for(iter = s.begin(); iter != s.end(); iter++)
 {
   cout<<*iter<<endl;
 }
 cout<<"s.size()="<<s.size()<<endl;
 return 0;
}
第一句构造一个set,
第二句插入一个元素,
关键在于a处:修改元素为1
最后输出各个元素均为1,
这个提供一个反例。以证明不要直接修改set的元素值,否则将会出现重复元素。不过这可能是vc的实现,其他平台可能结果不同,程序在vc6.0下运行通过。
 
 

set容器只是单纯的键的集合,键必须为一。set容器不支持下标操作,而且没有定义maped_type类型。在set容器中,value_type不是pair类型,而是与key_type类型相同的类型。

1.在set中添加元素

set<string> set1;

set1.insert("the");

set1.insert("end");

也可以添加一对迭代器,如下:

set1.insert(set33.begin(),set33.end());

这个方法返回void

带有一个键参数的insert版本返回pair类型对象,包含一个迭代器和bool值,迭代器指向拥有该键德曼元素,而bool值则表明是否添加了该元素。

2.从set中获取元素

set1.find(sting ss);方法返回指向在set1中ss的迭代器

set1.count(string ss);返回的值只可能是0或者1(0表示不存在,1表示存在).

set中的键为const类型。

常用的几个方法 
  boolean add(E e) 
  如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。
  boolean addAll(Collectionc) 
  如果 set 中没有指定 collection 中的所有元素,则将其添加到此 set 中(可选操作)。
  void clear() 
  移除此 set 中的所有元素(可选操作)。
  boolean contains(Object o) 
  如果 set 包含指定的元素,则返回 true。
  boolean containsAll(Collectionc) 
  如果此 set 包含指定 collection 的所有元素,则返回 true。
  boolean equals(Object o) 
  比较指定对象与此 set 的相等性。
  int hashCode() 
  返回 set 的哈希码值。
  boolean isEmpty() 
  如果 set 不包含元素,则返回 true。
  Iterator iterator() 
  返回在此 set 中的元素上进行迭代的迭代器。
  boolean remove(Object o) 
  如果 set 中存在指定的元素,则将其移除(可选操作)。
  boolean removeAll(Collectionc) 
  移除 set 中那些包含在指定 collection 中的元素(可选操作)。
  boolean retainAll(Collectionc) 
  仅保留 set 中那些包含在指定 collection 中的元素(可选操作)。
  int size() 
  返回 set 中的元素数(其容量)。
  Object[] toArray() 
  返回一个包含 set 中所有元素的数组。
  T[]
  toArray(T[] a)
 
  返回一个包含此 set 中所有元素的数组;返回数组的运行时类型是指定数组的类型。

set的用法的更多相关文章

  1. set<pair<int,int> >的用法

    例题链接:https://vjudge.net/contest/236677#problem/D 题意:首先输入两个数字n,m.n表示有n张桌子,编号从1到n,m表示有m个操作, 然后接下来一行有n个 ...

  2. set<pair<int,int> > 的运用

    In this cafeteria, the N tables are all ordered in one line, where table number 1 is the closest to ...

  3. binarySearch(int[] a,int fromIndex,int toIndex, int key)的用法

    package com.Summer_0420.cn; import java.util.Arrays; /** * @author Summer * binarySearch(int[] a,int ...

  4. Python中int()函数的用法浅析

      int()是Python的一个内部函数 Python系统帮助里面是这么说的 >>> help(int)  Help on class int in module __builti ...

  5. c++ 中pair类模板的用法详解

    pair: 头文件:#include<utility> 类模板:template <class T1, class T2> struct pair 参数:T1是第一个值的数据类 ...

  6. 数制转换itoa atoi int转字符串 字符串转int string转int int转string

    在苦于昨晚最后一个数制转换题,他的转换结果必须是整形数,纳尼?转换完放数组里又要变成整形数.这是什么操作,而且如果是16进制,用字母A,B-表示,在进行运算时都难以计算. 突发奇想,当十进制成立的时候 ...

  7. C语言复杂声明-void (*signal(int sig, void (*handler)(int)))(int);

    问题提出 请分析此声明:void (*signal(int sig, void (*handler)(int)))(int); 求解过程 在对上面的例子作分析之前,我们需要了解C语言的声明优先级,&l ...

  8. Undefined symbols for architecture i386: "MyGetOpenALAudioData(__CFURL const*, int*, int*, int*)"

    今天把apple developer上的例子程序oalTouch中的MyOpenALSupport.h和MyOpenALSupport.c添加到自己的工程中,并在另一个文件xxx.cpp里调用,结果出 ...

  9. 自定义函数中的参数返回值 “-> (Int -> Int)”的问题

    func makeIncrementer() -> (Int -> Int) { func addOne(number: Int) -> Int { + number } retur ...

  10. void (*f(int, void (*)(int)))(int) 函数解析 转

    今天与几个同学看到了一个函数指针定义: void (*f(int, void (*)(int)))(int) 以前在C trap pit fails里面见过,但是文章里面介绍的很详细,但是往往使初学者 ...

随机推荐

  1. Linux学习笔记(12)用户和用户组管理

    越是对服务器安全性要求高的服务器,越需要建立合理的用户权限等级制度和服务器操作规范.在Linux中主要是通过用户配置文件来查看和修改用户信息. 1 用户信息文件 (1)用户信息文件/etc/passw ...

  2. 【jQuery 分页】jQuery分页功能的实现

    自写的jQuery实现分页功能的分页组件: 功能效果如下: 分页组件就是上图中的三部分, 分别放在表格上部  和下部 . 其中, 1>>>页面的代码如下: product.jsp 其 ...

  3. svn代码提交注意事项

    先全部add,查看是否有gen和bin,然后再忽略这两个,忽略时选择最后rescury....

  4. Asp.Net Mvc 控制器与视图的数据传递

    数据传递也就是控制器和视图之间的交互,比如在视图中提交的数据,在控制器怎么获取,或者控制器从业务层获得一些数据,怎么传递到视图中,让视图显示在客户端呢?带着这些疑问,我们接着看..        下面 ...

  5. Codeforces Round #356 (Div. 2)-A

    A. Bear and Five Cards 题目链接:http://codeforces.com/contest/680/problem/A A little bear Limak plays a ...

  6. configSections

         由于最近一个项目的数据库变动比较频繁, 为了减少数据层的负担, 打算采用.net的MVC框架, 使用LINQ对付数据层.       这个框架的web.config文件里出现了configS ...

  7. TStringList 常用操作

    //TStringList 常用方法与属性: var   List: TStringList;   i: Integer; begin   List := TStringList.Create;   ...

  8. 静态数据成员(面向对象的static关键字)

    静态数据成员: 在类内数据成员的声明前加上关键字static,该数据成员就是类内的静态数据成员.先举一个静态数据成员的例子. #include<iostream> using namesp ...

  9. http://jingyan.baidu.com/article/2009576193ee38cb0721b416.html

    http://jingyan.baidu.com/article/2009576193ee38cb0721b416.html

  10. flume 使用 spool source的时候字符集出错

    1. 错误所在 -- ::, (pool--thread-) [ERROR - org.apache.flume.source.SpoolDirectorySource$SpoolDirectoryR ...