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. Linux初识(转)

    文件系统是linux的一个十分基础的知识,同时也是学习linux的必备知识. 本文将站在一个较高的视图来了解linux的文件系统,主要包括了linux磁盘分区和目录.挂载基本原理.文件存储结构.软链接 ...

  2. KVM虚拟化技术简介

    kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中.它使用Linux自身的调度器进行管理,所 ...

  3. GreenDao官方文档翻译(下)

    第五篇 查询 查询会返回符合某些特定标准的实体.你可以使用原始的SQL定制查询语句,或者更好的方式:使用GreenDao的QueryBuilder API.该查询也支持lazy-loading的结果集 ...

  4. memcache、memcached、groupcache的区别

    对PHP语言来说,PHP使用memcache有两个模块,分别叫memcache和memcached,他们的区别看下表: 参考:http://hi.baidu.com/tony_wd/item/605e ...

  5. C#读写文件总结

    1.使用FileStream读写文件   文件头:   using System; using System.Collections.Generic; using System.Text; using ...

  6. Android无限级树状结构

    通过对ListView简单的扩展.再封装,即可实现无限层级的树控件TreeView. package cn.asiontang.nleveltreelistview; import android.a ...

  7. Java与云计算有什么关系呢

    在如今这个信息技术高速发展的今天,云计算已经不是一个陌生的概念了,但是,当云计算遇到java将会有什么样的问题产生呢?下面,新霸哥将会为你揭晓Java与云计算之间的关系. 众所周知,java是一种应用 ...

  8. ps做gif love教程(转)

    先看看效果吧: 这是在写部教程的时候,看到一个由方格组成的心.于是试着用PS做成了动画,然后加入了LOVE四个字母,看起来还可以.但是,有些复杂.复杂倒不是技术上的复杂,是做起来复杂. 来试试吧. 1 ...

  9. Hive QL

    转自http://www.alidata.org/archives/581 Hive 的官方文档中对查询语言有了很详细的描述,请参考:http://wiki.apache.org/hadoop/Hiv ...

  10. Tilera 服务器上hadoop单机版测试

    ---恢复内容开始--- 本篇博客用来记录在单个Tilera服务器上安装hadoop并且测试的经历,参阅了大多数博客. 1.Tilera服务器介绍 本Tilera服务器配备9核CPU,共挂在6块硬盘, ...