这就是在std中命名的问题... std::unique
应该被称为 std::trim_consecutive_duplicates
,这样就清楚了你需要先对向量进行排序,以使具有相同值的元素相邻。在这种情况下,我怀疑与集合相关的任何东西都不会比从向量到达更快,但如果您有机会从一开始就将所有内容放入集合中,那么您绝对应该这样做。
这是一个现代的C++20示例(
演示):
#include <algorithm>
#include <iostream>
#include <ranges>
#include <vector>
#include <cstdint>
namespace rng = std::ranges;
int main() {
std::vector<uint32_t> myvec = { 255, 1,3, 16, 5,6, 1, 3, 3, 255, 300 };
rng::sort(myvec);
const auto [first, last] = rng::unique(myvec);
myvec.erase(first, last);
std::cout << "my unique vector = {";
rng::for_each(myvec, [](uint32_t val){ std::cout << val << ", "; });
std::cout << "}" << std::endl;
}
输出:
my unique vector = {1, 3, 5, 6, 16, 255, 300, }