如何解决c ++如何聪明地计算元素频率?
我正在获取数组元素[2 2 2 3 4 5 6] 我要存储每个元素的数量吗?如何以最好的方式进行stl或类似的操作?
解决方法
使用std::map
:
int main() {
std::vector<int> vec = {2,2,3,4,5,6};
std::map<int,int> occurrences;
for (auto i : vec) occurrences[i]++;
for (auto [element,count] : occurrences) {
std::cout << element << " appeared " << count << " times\n";
}
}
,
如果您知道值的可能范围很小且接近0:
std::array<size_t,max_value> histogram;
否则
std::/*unordered_*/map<int,size_t> histogram;
然后
for (int value : elements) { ++histogram[value]; }
,
std::unordered_map<int,size_t> histogram;
for (auto a : table) {
++histogram[a];
}
for(auto [val,count] : histogram) {
std::cout << val << ' ' << count << '\n';
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。