C++ Programmer's Cookbook

{C++ 基础} {C++ 高级} {C#界面,C++核心算法} {设计模式} {C#基础}

stl----sort 与unique的调用次序和unique的用法

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <list>
using namespace std;

 

int main()
{
 
 int source[] = { 1, 4, 4, 6, 1, 2, 2, 3, 1, 6, 6, 6, 5, 7,
  5, 4, 4 };
 int sourceNum = sizeof(source)/sizeof(source[0]);

 vector<int> coll;

  
  copy (source, source+sourceNum,               //source
  back_inserter(coll)) ;                  //destination

  copy (coll.begin(), coll.end(), ostream_iterator<int>(cout," "));
  cout << "\n\n";

  sort(coll.begin(),coll.end());

 
 vector<int> :: iterator pos;
 pos = unique (coll.begin(), coll.end());
 copy (coll.begin(), coll.end(), ostream_iterator<int>(cout," "));
 cout << "\n\n";

 
 copy (coll.begin(), pos, ostream_iterator<int>(cout," "));     
 cout << "\n\n";

 
 copy (source, source+sourceNum,coll.begin());      

                 

 copy (coll.begin(), coll.end(),ostream_iterator<int>(cout," "));
 cout << "\n\n";

 //remove elements if there was a previous greater element
 coll.erase (unique (coll.begin(), coll.end(),greater<int>()), coll.end());
 
 copy (coll.begin(), coll.end(), ostream_iterator<int>(cout," "));
 cout << "\n\n";
}



----------------------------------------
但是当要比较的数为计算所的的一个double,不能用sort和unique,怎么办?有没有好的办法啊!谢谢!

比如要比较的vector是从屏幕是得到的点的x坐标!坐标是通过鼠标时时得到!
要得到所有的不同的点的x坐标?

(可以用近似的算法)

posted on 2005-12-14 14:59 梦在天涯 阅读(4376) 评论(2)  编辑 收藏 引用 所属分类: STL/Boost

评论

# re: stl----sort 与unique的调用次序和unique的用法 2005-12-15 09:56 e夜星空

1.为什么说sort和unique不能用于double呢?是因为实数无法用==进行比较吧。
2.sort/unique在什么地方说明用==进行比较呢?它是可以改变为自己提供的一个函数算子吧。

sort/unique都是重载的STL算法,前面例子是2个参数的版本,它们默认用==进行比较。另有一个3个参数的版本,第3个参数是一个二元谓词,为double定义自己的二元谓词,它的作用就是实数版的==。

就到这吧,你可以参考STL源码。  回复  更多评论   

# re: stl----sort 与unique的调用次序和unique的用法 2005-12-15 16:25 梦在天涯

恩!是的啊,。net2003中有3个参数的版本啊,也可以自己定义一个比较函数,
sort(XXX.begin(),XXX.end(), less_second);//less_second自定义函数
unique(XXX.begin(),XXX.end(),equal_double);//equal_double自定义函数

但是再.net2005中没有啊,编译不通过啊,好像有 4个参数的版本啊!不知道怎么用啊


屏幕得到的点的坐标,取4位小数,比较!我的方法×10000,然后long啊!大家有没有更好的方法啊 !



谢谢 啊!  回复  更多评论   


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

EMail:itech001#126.com

导航

统计

  • 随笔 - 461
  • 文章 - 4
  • 评论 - 746
  • 引用 - 0

常用链接

随笔分类

随笔档案

收藏夹

Blogs

c#(csharp)

C++(cpp)

Enlish

Forums(bbs)

My self

Often go

Useful Webs

Xml/Uml/html

搜索

  •  

积分与排名

  • 积分 - 1676696
  • 排名 - 5

最新评论

阅读排行榜