码迷,mamicode.com
首页 > 其他好文 > 详细

stl vector自定义类型的去重问题

时间:2014-05-08 10:01:02      阅读:345      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   color   

最近项目遇到一个问题,有关stl vector自定义类型的去重问题。

背景:1、在一个vector中,存在大量元素拥有同一属性,而其他属性我们不关心,为了减少数据包大小,需要去重

   2、此自定义类型不能去重载==操作符(公司代码规范等原因)

   3、正常情况下,vector中对象是有序的(拥有同一属性的元素排在一起)                /*引起误解,后补充*/

于是,花了十分钟撸出了下列代码原型。

bubuko.com,布布扣
 1 #include <iostream>
 2 #include <vector>
 3 #include <algorithm>
 4 
 5 using namespace std;
 6 
 7 struct test
 8 {
 9         int key;
10         int value;
11 };
12 
13 class finder
14 {
15         public:
16                 explicit finder(test _t):t(_t){}
17                 const bool operator()(test __t)const{return t.key==__t.key;}
18         private:
19                 test t;
20 };
21 
22 int main(void)
23 {
24         vector<test> vTest;
25         test t1 = {1,10};
26         test t2 = {1,11};
27         test t3 = {2,8};
28         test t4 = {2,9};
29         test t5 = {1,6};
30         vTest.push_back(t1);
31         vTest.push_back(t2);
32         vTest.push_back(t3);
33         vTest.push_back(t4);
34         vTest.push_back(t5);
35 
36         for(int index=0; index!=vTest.size(); ++index)
37         {
38                 vTest.erase(find_if(vTest.begin(),vTest.end(),finder(vTest[index])));
39                 if(index == vTest.size())
40                         break;
41          }
42 
43         for(int index=0; index!=vTest.size(); ++index)
44                 cout<<vTest[index].key<<\t<<vTest[index].value<<endl;
45 
46         return 0;
47 }
bubuko.com,布布扣

结果:

bubuko.com,布布扣

这里利用了一下仿函数(functor)来构造find_if的条件,达到查找具有相同属性的自定义类型对象。

if里的判断是为了防止segment fault,erase在删除最后一个元素的时候,会给你带来惊喜-_-(详情请查看stl吧)。

目的达到了,但是总感觉循环太浪费CPU太低效太罪恶了,各位看官有没有更好的办法呢?求解。

stl vector自定义类型的去重问题,布布扣,bubuko.com

stl vector自定义类型的去重问题

标签:style   blog   class   code   java   color   

原文地址:http://www.cnblogs.com/yuanzz/p/3714585.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!