【发布时间】:2014-02-24 08:29:54
【问题描述】:
因此我有std::vector<type>.
类类型没有operator<,但有operator==。
因此,我无法使用std::unique 对我的向量进行排序。
如何从向量中删除重复的元素?
【问题讨论】:
-
如果不订购,您几乎没有机会有效地做到这一点。未排序(它必须没有排序功能)会将您直接扔到 O(N^2) - 土地。
-
@WhozCraig:不一定,如果你能得到一个完美的哈希值,你可以在 O(N) 内完成。
-
@MatthieuM。如果您可以提供完美的哈希,那么这首先在无序向量中而不是
std::unordered_set中做了什么?鉴于我们必须处理的唯一事情是OP提供的信息,我的主张是基于我的主张。如果他们有一个合理的散列(完美与否),那么这个问题中的 X 是“为什么我为此使用错误的容器?”显然我不能说给定这样的散列它是行不通的;显然会的。 -
其实,在这种情况下,我应该找出我的容器是否包含重复的元素,并在删除它们之后。
-
@EduardRostomyan 因为这个问题已经很接近了,所以我无法提供一个权宜之计的解决方案。鉴于您提出的问题的限制,this may do what you want。它应该适用于给定的限制,仅使用
operator ==进行相等比较,尽管我承认我只在一个简单的标量类型上测试了它。总之,希望对你有所帮助。祝你好运,先生。