使用STL去除std::vector自定义结构体重复项
来源:互联网 发布:网络小贷公司设立条件 编辑:程序博客网 时间:2024/05/29 04:29
最近搞了一个小东西要去除一个vector中重复的项。是这样的:我用组播搜索设备,得到设备IP信息、版本号信息,等,但有时会接收到多个相同IP设备的信息,因此要过滤掉重复的IP。我使用vector存储每台设备信息,包括IP、版本号,因此需要使用结构体。另外,要对这些设备IP进行排序,让其IP顺序排列。
抽象出来,就是对一个包括结构体的vector进行排序、过滤重复项。参考网络资源,做了实现。
源码如下:
#include <vector>#include <string>#include <algorithm>#include <stdio.h>class foobar{public: std::string token; std::string item; int number; // 重载操作符 bool operator<(const foobar& rhs) { return (*this).token < rhs.token;}; bool operator>(const foobar& rhs) { return (*this).token > rhs.token;}; bool operator==(const foobar& rhs) { return (*this).token == rhs.token;} };bool sort_token(const foobar& s1, const foobar& s2){ return s1.token.compare(s2.token) < 0;}int main(int argc, char* argv[]){ std::vector<foobar> vFoo; foobar tmp; tmp.token = "osd_1"; tmp.item = "OSD11111"; tmp.number = 1; vFoo.push_back(tmp); tmp.token = "osd_0"; tmp.item = "OSD111111"; tmp.number = 0; vFoo.push_back(tmp); tmp.token = "osd_2"; tmp.item = "OSD22222"; tmp.number = 2; vFoo.push_back(tmp); tmp.token = "osd_3"; tmp.item = "OS3330"; tmp.number = 3; vFoo.push_back(tmp); tmp.token = "osd_4"; tmp.item = "OS444444444444444"; tmp.number = 4; vFoo.push_back(tmp); tmp.token = "osd_1"; tmp.item = "OS5555555554444"; tmp.number = 5; vFoo.push_back(tmp); printf("before sort: \n"); for (unsigned int i = 0; i < vFoo.size(); i++) { printf("token: %s font: %d item: %s\n", vFoo[i].token.c_str(), vFoo[i].number, vFoo[i].item.c_str()); } std::sort(vFoo.begin(),vFoo.end(),sort_token); // 先排序 // 去除重复项 std::vector<foobar>::iterator unque_it = std::unique(vFoo.begin(), vFoo.end()); vFoo.erase(unque_it, vFoo.end()); printf("after unque: \n"); for (unsigned int i = 0; i < vFoo.size(); i++) { printf("token: %s font: %d item: %s\n", vFoo[i].token.c_str(), vFoo[i].number, vFoo[i].item.c_str()); } return 0;}
李迟 2016.6.9 周四端午 夜
0 0
- 使用STL去除std::vector自定义结构体重复项
- C++ STL : std::vector
- 【C++ STL应用与实现】2: 如何使用std::vector
- [STL]源码解析:std::vector
- 实战c++中的vector系列--对vector<自定义类>使用std::find 和 std::find_if 算法
- 实战c++中的vector系列--对vector<自定义类>使用std::find 和 std::find_if 算法
- std::vector 使用&&注意事项
- C++ 使用::std::vector<>
- 初步使用std::vector
- C++ 使用::std::vector<>
- std::vector如何使用
- stl std::find使用
- std::map 如何使用结构体作为自定义键值
- std::map 如何使用结构体作为自定义键值
- 使用std::vector 的陷阱
- 使用std::vector 的陷阱
- 使用std::vector的陷阱
- std::vector,std::deque,std::list的区别的使用
- Eclipse 安装需要的 JDK 版本简要说明
- 【leetcode】328. Odd Even Linked List
- python 安装NumPy
- C#自写的一个HTML解析类(类似XElement语法)
- 用JavaScript玩转计算机图形学(二)基本光源
- 使用STL去除std::vector自定义结构体重复项
- 举例配置hadoop完全分布式集群(准备节点数4个,h15、h16、h17、h18)
- 基于TCP/IP的网络编程
- C# Stream 和 byte[] 之间的转换
- C# vs C++ 全局照明渲染性能比试
- 如何在手机浏览器使用调试工具
- git 命令
- 二叉树的非递归建立(二)
- C#中List〈string〉和string[]数组之间的相互转换