c++ - 计算独特项目的更好方法

标签 c++ c++11 c++-standard-library c++17

我只是找到了一种方法来计算 vector 中唯一项的数量。这是我最天真的方法。

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();

这是标准库中唯一的方法还是更好的方法?

最佳答案

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

真正简单的方法是将项目插入到 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();

关于c++ - 计算独特项目的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28100712/

相关文章:

c++ - 使用 volatile 标准模板对象的方法

c++ - Boost 可以用作 C++ 标准库的完全替代品吗?

C++11 emplace_back on vector<struct>?

c++ - 如何使用 Pantheios 在日志中包含调用类和行号?

c++ - 字符串比较 vector C++

c++ - 使用 FLANN 计算半径中的精确最近邻时出错

c++ - 从命令提示符执行 C++ 程序

C++ 继承 - 为什么调用父方法?

c++ - 为什么 std::priority_queue 首先返回最大的元素但使用 std::less ?

c++ - 在我的类(class)中,我应该用什么来改变 cout/cin 的东西?