我有一个 | 0 Math.floor
------+------+------------
2.5 | 2 | 2
1.5 | 1 | 1
0.5 | 0 | 0
-0.5 | 0 | -1
-1.5 | =1 | -2
-2.5 | -2 | -3
类型的向量,我想知道这个向量中每个元素出现了多少次。
这个向量可能非常大,所以我想这个循环并不是一个好主意。
最有效的方法是什么?
答案 0 :(得分:3)
除非矢量已经被排序(或至少分组,所以相同的元素都在一起),查看矢量中的每个项目是不可避免的(即使它被排序,除非你期望很多重复,否则很可能好的,看看每个项目都是首选的方法) 1 。
一个明显的方法是遍历向量,并使用std::unordered_map
计算元素:
std::unordered_map<unsigned, size_t> counts;
for (auto v : your_vector)
++counts[v];
然后你可以(例如)打印出值:
for (auto const &p : counts)
std::cout << "The value: " << p.first << " occurred " << p.second << "times\n";
答案 1 :(得分:0)
您可以使用 std::count
。
使用简单:
std::count(vect.begin(), vect.end(), 3);