计算独特物品的更好方法

5 c++ c++-standard-library c++11 c++17

我只想找到一种方法来计算向量中的唯一项目数.这是我最天真的做法.

std::vector<Items> v;

// some other work
std::vector<Items> unique_Count;
unique_Count.clear();
std::unique_copy(v.begin, v.end(), std::back_inserter(unique_Count);
int uniqueCount = unique_Count.size();
Run Code Online (Sandbox Code Playgroud)

这是标准库中唯一有或更好的方法吗?

Jer*_*fin 5

它可能取决于您所说的“更好”是什么意思,但是肯定有一些更简单的方法,以及其他可能更快的方法。

真正简单的方法是将项目插入std::setstd::unordered_set。插入所有这些元素后,集合的大小将是唯一项的数量。

可能更快的方法是使用std::sortstd::unique“就地”找到唯一项,而不是复制它们。无论如何,这几乎std::unique_copy通常在内部执行的操作,但是就地执行此操作可以节省大量分配和复制费用。

std::vector<Items> v;

// populate v with data

std::sort(v.begin(), v.end());
int uniqueCount = std::unique(v.begin(), v.end()) - v.begin();
Run Code Online (Sandbox Code Playgroud)

  • `std::unique` 返回唯一范围的结尾,而开头不被修改。结果表达式应该是 `int uniqueCount = std::unique(v.begin(), v.end()) - v.begin()`。 (2认同)