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. Windows 小技巧: 變更輸入法順序

    Windows XP 中還是有辦法變更輸入法順序的!!只不過,要動用到 Regedit.exe 這個程式. 執行 Regedit.exe至 HKEY_CURRENT_USER\Keyboard Lay ...

  2. MySQL基础之第14章 存储过程和函数

    避免编写重复的语句 安全性可控 执行效率高 14.1.创建存储过程和函数 14.1.1.创建存储过程 CREATE PROCEDUREsp_name ([proc_parameter[,...]]) ...

  3. K2 K2Blackpearl安装步骤详解(服务端)

    转:http://www.cnblogs.com/dannyli/archive/2011/11/30/2269485.html 以下是K2 Blackpearl的安装步骤,本人亲测可用哦. 1.安装 ...

  4. PHP中超全局变量$GLOBALS和global的区别

    一.超全局变量$GLOBALS PHP超全局变量有很多,如下的都属于超全局变量(Superglobal): $GLOBALS,$_SERVER,$_GET,$_POST,$_FILES,$_COOKI ...

  5. ScrollView中嵌套ListView

    scrollview中嵌入listview,要是直接把listview嵌进scrollview中,listview的高度是固定的不能进行滑动.默认情况下Android是禁止在ScrollView中放入 ...

  6. 在VMware虚拟机中安装CentOS 7

    [声明] 欢迎转载,但请保留文章原始出处 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3917 ...

  7. 【LeetCode】27 - Remove Element

    Given an array and a value, remove all instances of that value in place and return the new length. T ...

  8. python 安装预编译库注意事项-pip

    一般安装依赖库用pip install 库名 就可以,某些情况下依赖的库需要安装预编译好的, 可以参考pip 安装时的错误信息 下面这个链接中可以直接下载 http://www.lfd.uci.edu ...

  9. 初识MFC,WinForm,WPF,Q't

    MFC和QT是C++中常见的GUI框架,而WinForm和WPF是C#中常用的框架,不过我们一般很少叫WinForm框架,可能直接叫图形控件类库更多点.反正只是个称呼罢了,爱咋叫就咋叫.另外WinFo ...

  10. [转] js prototype详解

    JavaScript能够实现的面向对象的特征有:·公有属性(public field)·公有方法(public Method)·私有属性(private field)·私有方法(private fie ...