set容器中不能插入重复的元素,需要其插入的元素有比较大小(<)、相等(==) 的逻辑判断,这是因为set中的元素是有序排列,

默认从小到大排列

std::set<type,std::less<type>> mySet ;

等同于 std::set<type> mySet;

所以需要元素的数据类型 具有 大小、相等判断的函数。

对于编译器标准定义数据类型(如 int,float,double等),系统已经定义大小判断;但对于自定义数据就要注意自己动手添加这些函数。

下边我们用自定义的三维点数据Point3D作为示例,程序如下:

 // test.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <math.h>
//#include <algorithm>
#include <set> #define CAD_ZERO 1.0E-6 #define FALSE 0
#define TRUE 1 typedef int BOOL; using namespace std; typedef struct Point3D
{
double x,y,z; Point3D()
{ } Point3D(double l,double m,double n)
{
x=l; y=m; z=n;
} //判断相等
BOOL operator == (const Point3D & pt) const
{
double lens();
lens=sqrt(pow(x-pt.x,)+pow(y-pt.y,)+pow(z-pt.z,));
if (lens<CAD_ZERO)
{
return TRUE;
}
else
{
return FALSE;
} } //判断大小
BOOL operator <(const Point3D & pt) const
{
if (x!=pt.x)
{
return x<pt.x;
}
else if (y!=pt.y)
{
return y<pt.y;
}
else
{
return z<pt.z;
}
}; }; int _tmain(int argc, _TCHAR* argv[])
{ set<Point3D> setPts;
set<Point3D>::iterator iter; pair<set<Point3D>::iterator,bool> pairPts; // 1.02 1.03 1.04
// 2.04 2.06 2.08
// 3.06 3.09 3.12
// 1.02 1.03 1.04 Point3D pts[];
pts[].x=1.02; pts[].y=1.03; pts[].z=1.04;
pts[].x=2.04; pts[].y=2.06; pts[].z=2.08;
pts[].x=3.06; pts[].y=3.09; pts[].z=3.12;
pts[].x=1.02; pts[].y=1.03; pts[].z=1.04;  //与第一个点重复
     for (int i=;i<;i++)
{
pairPts = setPts.insert(pts[i]);
if (!pairPts.second)
{
//(pairPts.first)->x=10;
printf("重复点坐标: %lf %lf %lf\n",pts[i].x,pts[i].y,pts[i].z);
}
} //
printf("\n");
printf("set.size()=%d\n",setPts.size()); //
int j();
for (iter=setPts.begin();iter!=setPts.end();iter++)
{
printf("第%d个点坐标: %lf %lf %lf\n",j++,(*iter).x,(*iter).y,(*iter).z);
} return ;
}

结果看到,重复点不会被加入。

STL容器set()--->自定义数据类型的更多相关文章

  1. 【转】c++中Vector等STL容器的自定义排序

    如果要自己定义STL容器的元素类最好满足STL容器对元素的要求    必须要求:     1.Copy构造函数     2.赋值=操作符     3.能够销毁对象的析构函数    另外:     1. ...

  2. 刷题常用的STL容器总结

    本文归纳总结刷题常用到STL容器以及一些标准算法,主要包括: string.vector.map.pair.unordered_map.set.queue.priority_queue.stack,以 ...

  3. 【pat】C++之刷题常用STL容器整理

    1.vector 动态数组,方便的动态扩容,方便的变量初始化(int类型默认初始化为0,bool默认初始化为false),可以用来实现邻接表(结点数太多的图). 头文件 #include<vec ...

  4. OSG 自定义数据类型 关键帧动画

    OSG 自定义数据类型 关键帧动画 转自:http://blog.csdn.net/zhuyingqingfen/article/details/12651017 /* 1.创建一个AnimManag ...

  5. 不要在公共接口中传递STL容器

    最近的一个项目,是开发一个framework,提供给公司内部不同的产品线使用. 之间遇到的一个问题,就是STL容器的使用, 而结论是不要在公共接口中传递STL容器: 这里说的STL容器,但主要则是指容 ...

  6. 转:STL容器里存放对象还是指针

    一.问题的引出: 容器可以存放对象,可以存放指针,这里要谈的是两者的使用问题.就是什么时候存放对象更好,什么时候存放指针更好? 二.问题的分析过程: 1. 首先说下stl容器的工作方式   对于内建类 ...

  7. STL容器之优先队列(转)

    STL容器之优先队列 原地址:http://www.cnblogs.com/summerRQ/articles/2470130.html 优先级队列,以前刷题的时候用的比较熟,现在竟然我只能记得它的关 ...

  8. STL容器之优先队列

    STL容器之优先队列 优先级队列,以前刷题的时候用的比较熟,现在竟然我只能记得它的关键字是priority_queue(太伤了).在一些定义了权重的地方这个数据结构是很有用的. 先回顾队列的定义:队列 ...

  9. 关于STL容器

    容器: 概念:如果把数据看做物体,容器就是放置这些物体的器物,因为其内部结构不同,数据摆放的方式不同,取用的方式也不同,我们把他们抽象成不同的模板类,使用时去实例化它 分类: 序列容器.关联容器.容器 ...

随机推荐

  1. 【自动化测试】Selenium 下载文件

    用curl确定要下载的文件是什么类型的:另一种方法是使用requests 模块来查找内容类型 文件类型 http://tool.oschina.net/commons 1.先设置下载的目录,下载文件的 ...

  2. Java多线程-工具篇-BlockingQueue

    前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题.通过这些高效并且线程安全的队列 类,为我们快速搭建高质量的多线程程序带来极大的 ...

  3. click和onclick的区别

    onclick是绑定事件,click本身是方法作用是触发onclick事件,只要执行了元素的click()方法,下面有个示例,大家可以看看   Html代码 ? 1 2 3 4 5 6 7 8 9 1 ...

  4. 计算机网络——TCP三次、四次握手详解

    三次握手:建立TCP连接 连接建立过程: B的TCP服务器进程先创建传输控制块TCB(存储了每一个连接中的一些重要信息,如:TCP连接表,到发送和接收缓存的指针,到重传队列的指针,当前的发送和接收序号 ...

  5. php 5.3开始使用mysqlnd作为的默认mysql访问驱动

    mysqlnd成为php 5.3中的默认mysql驱动,它有如下优点: mysqlnd更容易编译: 因为它是php源码树的一个组成部分 mysqlnd和php内部机制结合更紧密,是优化过的mysql驱 ...

  6. OTG_FS_ID功能及引申

    1. 概要   OTG设备使用插头中的ID引脚来区分A/B Device,ID接地被称作为A-Device,充当USB Host,A-Device始终为总线   提供电力,ID悬空被称作为B-Devi ...

  7. Web开发中设置快捷键来增强用户体验

    从事对日外包一年多以来,发现日本的无论是WinForm项目还是Web项目都注重快捷键的使用,日本人操作的时候都喜欢用键盘而不是用鼠标去点,用他们的话来说"键盘永远比鼠标来的快",所 ...

  8. NGUI-制作位图字体以及图文混排

    制作字体过程 首先得下载一个位图制作工具Bitmap font generator,可以点击这里下载 1.新建txt文件,输入字体里面包含的文字 2.保存为utf-8格式:点击文件另存为,选择编码格式 ...

  9. 三角剖分求多边形面积的交 HDU3060

    //三角剖分求多边形面积的交 HDU3060 #include <iostream> #include <cstdio> #include <cstring> #i ...

  10. STL源码分析读书笔记--第二章--空间配置器(allocator)

    声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...