std::set 中内部元素有序条件删除的理解
std::set 中内部元素有序条件删除的理解
1. std::set中的元素是有序排列的
注意:Set集合中的元素通过iterator的引用,但是不能修改。
元素排序:
(1)元素中实现比较operator < ,
(2)Set构造中,输入仿函数(实现元素比较排序)
基于上述的规则,因此:如果要更新Set中元素的修改,只能将元素erase删除,然后将更新后的元素insert中,则自动保证insert中的相应位置。
2. 如果Set中的元素是object,不是指针。
删除元素的代码:
因为, 如果用iterator删除当前所指的元素,只能用s.erase(it++) 这样的形势, 在it删除之后,其实已经更新为下一个的迭代器了。
#include <set>
using std::set; int main(int argc,char *argv[])
{
set<int> s;
set<int>::iterator it; s.insert();
s.insert();
s.insert(); for(it=s.begin();it!=s.end();){
if((*it)%==)
s.erase(it++);
else
it++;
} system("pause"); return ;
} STL/C++__中 set(集合) 删除元素, set的erase不会返回迭代器,这点需要注意。
3. 如果Set中的元素是:指针。
因为元素是指针,因此同样要要提供:比较函数。
这样可以突破了:虽然不能修改元素内容,因为元素指针不能修改,但是元素指针所指的内存可以修改。但是注意:此时的“顺序”不能保证。
注意,在Set中,插入指针类型,如果释放资源,可以直接delete (*it), 注意, 此时的it还是有效的,可以使用it++,
#include "stdafx.h"
#include <set> #include <iostream>
using namespace std; class Name
{
public:
Name(int _a, int _b) :a(_a), b(_b){};
int a;
int b;
}; class CMP
{
public: bool operator()(Name* _p1, Name* _p2)
{
if (_p1->a < _p2->a)
return true;//前一个元素,小于,后一个元素,升序
return false; }
};
typedef std::set<Name*, CMP> ContainerType; int _tmain(int argc, _TCHAR* argv[])
{
ContainerType container;
container.insert(new Name(, ));
container.insert(new Name(, ));
container.insert(new Name(, ));
container.insert(new Name(, ));
container.insert(new Name(, ));
container.insert(new Name(, )); ContainerType::iterator it;
//显示
for (it = container.begin(); it != container.end(); ++it)
{
//更新内部状态
cout << (*it)->a << " " << (*it)->b << endl;
} cout << "---------------------" << endl; for (it = container.begin(); it != container.end(); ++it)
{
//更新内部状态
if ((*it)->a > )
(*it)->a -= ;
else
{
(*it)->a += ;
} }
container.insert(new Name(, ));
container.insert(new Name(, ));
//显示
for (it = container.begin(); it != container.end(); ++it)
{
//更新内部状态
cout << (*it)->a << " " << (*it)->b << endl;
} //释放资源
for (it = container.begin(); it != container.end(); ++it)
{
//更新内部状态
delete *it;
} system("pause");
return ;
}

endl;
std::set 中内部元素有序条件删除的理解的更多相关文章
- 删除 list 集合中的元素
删除 list 集合中的元素,当删除的元素有多个的时候,只能使用迭代器来删除. 当删除 list 集合中的元素只有一个的时候,有三种方法都可以实现. import java.util.ArrayLis ...
- Java根据条件删除Map中元素
今天在写程序过程中,需要根据判断条件删除一个Map中的相应数据,我自然而然想到可以通过调用Map中的remove(Object key)函数进行删除:代码如下: public Map<Doubl ...
- Map中根据条件删除元素
今天在写程序过程中,需要根据判断条件删除一个Map中的相应数据,我自然而然想到可以通过调用Map中的remove(Object key)函数进行删除:代码如下: public Map<Doubl ...
- vector中的元素删除
删除vector中的元素,最容易的方法就是使用vector的erase()函数. vector vec;for ( vector::iterator iter = vec.begin(); iter! ...
- Java中如何优雅地删除List中的元素
在工作中的许多场景下,我们都会使用到List这个数据结构,那么同样的有很多场景下需要删除List中的某一个元素或某几个元素,那么我们该如何正确无误地删除List中的元素的,今天我来教大家三种方式. 前 ...
- 如何正确遍历删除List中的元素(普通for循环、增强for循环、迭代器iterator、removeIf+方法引用)
遍历删除List中符合条件的元素主要有以下几种方法: 普通for循环 增强for循环 foreach 迭代器iterator removeIf 和 方法引用 其中使用普通for循环容易造成遗漏元素的问 ...
- 4.19——数组双指针——26. 删除有序数组中的重复项 & 27. 删除有序数组中的重复项II & 80. 删除有序数组中的重复项 II
第一次做到数组双指针的题目是80: 因为python的List是可以用以下代码来删除元素的: del List[index] 所以当时的我直接用了暴力删除第三个重复元素的做法,大概代码如下: n = ...
- 正确遍历删除List中的元素方法(推荐)
遍历删除List中的元素有很多种方法,当运用不当的时候就会产生问题.下面主要看看以下几种遍历删除List中元素的形式: 1.通过增强的for循环删除符合条件的多个元素 2.通过增强的for循环删除符合 ...
- 如何正确遍历删除List中的元素
遍历删除List中的元素有很多种方法,当运用不当的时候就会产生问题.下面主要看看以下几种遍历删除List中元素的形式: 1.通过增强的for循环删除符合条件的多个元素 2.通过增强的for循环删除符合 ...
随机推荐
- 4. 深入 Python 流程控制
除了前面介绍的 while 语句,Python 还从其它语言借鉴了一些流程控制功能,并有所改变. 4.1. if 语句 也许最有名的是 if 语句.例如: >>> x = int(i ...
- thread库,附带程序介绍
千万注意线程不要比主线程晚结束,主线程一旦结束,对象将被销毁 std:thread 代表了一个线程对象 this_thread:是一个命名空间,对当前调用者线程进行操作 如果把可调用对象作为参数传递给 ...
- hadoop 启动的时候datanode报错 Problem connecting to server
刚配置好的hadoop,namenode可以正常开启,但是datanode却不停的报错,并且不能正常启动: 2014-05-04 10:43:33,970 WARNorg.apache.hadoop. ...
- 可以搜索局域网内的所有IP地址的软件
几乎都用现有的工具,直接扫描,这里我已python为例,搜索一下局域网内所有活动IP,基本原理就是ping,对返回的结果进行分析,从而判断对应ip是否活动,代码很简单,实验环境win10+python ...
- svn冲突问题解决办法
经常有人会说,树冲突是很难解决的一类冲突,其实一旦了解了其原理,要解决也不难.先回顾下对于树冲突的定义. 树冲突:当一名开发人员移动.重命名.删除一个文件或文件夹,而另一名开发人员也对它们进行 ...
- JoyOI1035 棋盘覆盖
原题链接 对棋盘染色,坐标和为奇数的染黑,偶数为白.这时会发现对于相同颜色的格子,是无法放置骨牌的,这样我们就将所有格子分成两类,然后根据能否放置骨牌连边,最后就是求二分图最大匹配了. 这里我是用的匈 ...
- python-bs4的使用
BeautifulSoup4 官方文档 是一个Python库,用于从HTML和XML文件中提取数据.它与您最喜欢的解析器一起使用,提供导航,搜索和修改解析树的惯用方法.它通常可以节省程序员数小时或数天 ...
- libpcap 库使用(二)
参考资料: http://www.tcpdump.org/manpages/pcap.3pcap.html 分类介绍了该lib的函数 Opening a capture handle for read ...
- post方式发送请求报文
$url="http://www.test.com/04_demo_weather.php?id=5"; $ci=curl_init($url); curl_setopt($ci, ...
- Maven 下载安装
http://www.runoob.com/maven/maven-tutorial.html https://www.yiibai.com/maven/ Maven 提倡使用一个共同的标准目录结构, ...