在两个向量之间找到相同元素的最有效方法是什么
what is the most efficient way to found the same element between two vector
如果我必须在下面这样的向量中添加字符
vector<char> sv;
sv.push_back('a');
sv.push_back('b');
sv.push_back('c');
sv.push_back('d');
sv.push_back('e');
那么我有另一个字符向量,它有sv在之前包含的部分元素
vector<char> sv2;
v2.push_back('c');
v2.push_back('d');
v2.push_back('a');
v2.push_back('f');
v2.push_back('g');
如果我想计算相同元素出现的次数,解决这个问题的最佳方法是什么?
对于vector<char>
,它可以在线性时间内完成。为了简单起见,我们假设char
是无符号的,或者我们使用vector<unsigned char>
。
int s[256] = { 0 }, s2[256] = { 0 };
for (auto a : sv)
++s[a];
for (auto a : sv2)
++s2[a];
int count = 0;
for (int i = 0; i < 256; ++i)
count += min(s[i], s2[i]);
在一般情况下,使用排序和set_intersection
,正如@Jarod42所建议的那样。
相关文章:
- 从字符数组的元素中减去'a'是什么意思
- C++ 未初始化的本地(非全局)int 数组中的元素类型到底是什么?
- 在向量中查找大于 0(或通常为 k)的最小元素的最佳方法是什么?
- 通过作为指向 C++ 函数的指针传递来访问 std::array 元素的正确方法是什么?
- 找到对称矩阵的最大元素的最有效算法是什么
- 返回向量元素的 l 值的正确方法是什么?
- 按升序打印矢量的所有元素直到它为空而没有重复项的最有效方法是什么?
- 从长(且合理)稀疏向量中选择随机元素的最有效方法是什么?
- " ans += (a[i] - ans * r > 0); "是什么意思,其中 ans,r 是整数,a[i] 是数组元素?
- 在查找子集中元素和元素数量之间的二进制比较背后的逻辑是什么?
- 我如何找出3D容器的元素是什么类型
- 的每个元素是什么意思?
- 在 c 和 c++ 中,二维数组的元素是什么类型?
- 使用 CDT 从头文件中获取属性定义的节点元素是什么
- 在 typedef 中有三个元素是什么意思 C++.
- 数组在方括号中增加元素是什么意思
- 如何知道您输入到std::array中的最后一个元素是什么?
- 我读了map.erase(map.end());删除地图的最后一个元素。但是最后一个元素是什么?它是否基于元素的插入顺序?
- 向量中的第一个元素是什么
- 对象指针向量中的元素是什么