boost 或者 stl 有现成的去重函数吗?

2016-11-14 17:56:32 +08:00
 hailongs

有个 vector<myclass>需要按照 myclass 中一定的 id 做下去重。有现成的函数可以用吗?知道的帮下忙,谢谢。

1981 次点击
所在节点    C
9 条回复
hailongs
2016-11-14 17:57:26 +08:00
类定义比如
struct myclass
{
int id;
string name;
};

id 相同的只保留一个
chengluyu
2016-11-14 18:05:38 +08:00
std::sort 然后 std::unique

found from http://en.cppreference.com/w/cpp/algorithm
dant
2016-11-14 18:06:58 +08:00
std::set
Herobs
2016-11-14 18:09:11 +08:00
用 set 来做,或者排序,都是 nlgn
zhuangzhuang1988
2016-11-14 18:26:57 +08:00
自己写个函数
htfy96
2016-11-14 18:41:01 +08:00
auto new_end = std::unique(std::begin(v), std::end(v), [](const myclass& a, const myclass& b) { return a.id == b.id; });
// 新的区间是[v.begin(), new_end)
// 要删除不同的元素可以再
v.erase(new_end, std::end(v));
zhuangzhuang1988
2016-11-14 18:41:49 +08:00
或者这个
https://cpplinq.codeplex.com/wikipage?title=Cpplinq%20Query%20Operators

auto result = from_vector(xxoo) >> distinct() >> to_vector();
记得自定义下 ==
zhidian
2016-11-15 08:42:47 +08:00
@htfy 正解。

外吐槽, vector... 你说啥去重。。。这是你逻辑上的东西跟 vector 这个数据结构有啥关系。。。

外,用 set 的话,可以实现 std::hash(myclass mc),返回 id 应该就可以了。
hailongs
2016-11-16 11:51:38 +08:00
@zhidian vector 有顺序呀。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/320453

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX