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 ;
}

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

最新文章

  1. ASP.NET导出Excel文件
  2. UI崩溃的解决方案
  3. SharePoint 2013 Error - TypeError: Unable to get property &#39;replace&#39; of undefined or null reference
  4. Doccms 中新闻列表排序无效bug的修复
  5. JavaScript深入浅出2-表达式和运算符
  6. Todd&#39;s Matlab讲义第1讲:向量,函数和作图
  7. hdu 1576 A/B 拓展欧几里得算法
  8. HTML5新特性学习-2
  9. python cmd 模块
  10. 自定制emoji替换系统的emoji键盘
  11. php memcache 扩展 php -m 与 phpinfo() 不同
  12. IDA学习笔记 函数调用约定
  13. Servlet总结二(文件路径)
  14. leetcode — remove-duplicates-from-sorted-list
  15. mac 清理
  16. 使用 pjsip 代码独立开发
  17. 关于Java8 Stream流的利与弊 Java初学者,大神勿喷
  18. JavaScript 中的匿名函数((function() {})();)与变量的作用域
  19. [Android实例] Android Studio插件-自动根据布局生成Activity等代码1.4 (开源)(申明:来源于网络)
  20. 通过IOCTL_ATA_PASS_THROUGH访问ATA设备接口

热门文章

  1. Python中字符串的使用
  2. php redis扩展
  3. jQuery 实现Bootstrap Chart 图表
  4. 【原创】Linux下编译链接中常见问题总结
  5. [Everyday Mathematics]20150227
  6. selenium python (十二)下拉框的处理
  7. 让IE6IE7IE8支持CSS3属性的8种方法介绍
  8. ajax实现md5加密
  9. Fedora20 和ubuntu 14.04 chrome标签中文乱码
  10. Ubuntu 下一个可用的音乐播放器