因此,我有一个
类类型没有
我该如何从向量中删除重复元素?
std::vector<type>
。类类型没有
operator<
,但有operator==
。
因此,我不能使用std::unique
对向量进行排序。我该如何从向量中删除重复元素?
我认为最好的选择是编写一些二进制谓词来用于向量排序,然后使用 std::unique
。请记住,谓词必须是可传递的!
如果这不是一个选项,您只能使用二次算法:
std::vector<type> a
std::vector<type> result;
for (unsigned i = 0; i < a.size(); ++i) {
bool repeated = false;
for (int j = 0; j < i; ++j) {
if (a[j] == a[i]) {
repeated = true;
break;
}
}
if (!repeated) {
result.push_back(a[i]);
}
}
// result stores the unique elements.
std::unordered_set
而是使用无序向量?我基于我们唯一能够使用的信息——OP提供的信息来做出这个判断。如果他们有一个合理的哈希(完美或不完美),那么这个问题中的X就是“为什么我在使用错误的容器?”显然,我不能说在这样的哈希下它不起作用;它肯定会起作用。 - WhozCraigvector
对于通用操作更有效率?我不知道,我不是OP。 - Matthieu M.operator ==
进行相等比较,尽管我只在简单的标量类型上进行了测试。无论如何,我希望它能对您有所帮助。祝您好运。 - WhozCraig