如果向量包含重复项,则此函数应返回 true。知道为什么它不起作用吗?
This function should return true if a vector contains repeats. Any idea why it isn't working?
我认为这很简单,但是当我传递这个向量时,它返回了true:
int arr2[] = {1, 6, 7, 89, 69, 23, 19, 100, 8, 2, 50, 3, 11, 90};
std::vector<int> vec2(arr2, arr2 + sizeof(arr2)/sizeof(int));
算法很简单:
(1) 实例化地图。(2) 对于向量中的每个 int,(2i) 如果它不在地图中,请添加它,(2ii) 如果它在地图中,则返回 true。(3) 如果以 for 结尾返回 false已到达循环。
bool contains_repeats_1(const std::vector<int>& V) {
std::map<int,bool> M;
for (std::vector<int>::const_iterator it = V.begin(); it != V.end(); it++) {
if (M.count(*it) != 0) {
M.insert(std::pair<int,bool>(*it, true));
} else {
return true;
}
}
return false;
}
另外,我将不胜感激有关如何更好地解决此问题的任何建议。我正在使用Apple XCode,它没有包含unordered_map的库。
更容易:
std::set<int> s(vec2.begin(), vec2.end());
return s.size() < vec2.size();
这依赖于std::set
不包含重复项的事实。因此,如果向量中有任何重复项,则集合将更小。
如果您担心这会执行太多不必要的复制,则可以使用循环并在第一个重复项时中断:
std::set<int> s;
for (int i : vec2) {
if (!s.insert(i).second) return true;
}
return false;
std::sort(V.begin(), V.end());
if (std::adjacent_find(V.begin(), V.end()) != V.end()) {
// found a duplicate
}
相关文章:
- C++ 如果在 if 为 true 之后运行,为什么还会这样做
- 为什么组合的上限和下限比较的计算结果总是为 true?
- 为什么'typeid(x) == typeid(y)'的计算结果为 true,其中 'x' 和 'y' 分别是 T 和 T& 类型的 id-表达式?
- C++如果使用 lambda 表达式的语句返回 true,但输出来自 false,为什么
- Live555MediaServer 在每个新连接时重新启动流。为什么将"reuseSource"设置为 true 无法按预期工作?
- 为什么在 IsValid(Object) 返回 true 后不能安全地使用 Object?
- 当收到无效输入时,为什么(true)跳过CIT
- 为什么所有可能的整数都"true"在 C++ 的 if 语句内的 long int 范围内,而 0 不是?
- 为什么我的布尔函数返回 true 会导致读取访问冲突?
- 为什么包含指针的条件总是返回 true?
- 为什么#ifndef __func__返回true
- 为什么string.empty()在字符串包含一个值时评估为true
- 我的bool函数一直返回true,我不知道为什么
- 为什么当 std::sort 中的比较函数始终返回 true 时出现运行时错误
- 为什么在这种情况下 QCOMPARE 不返回 True?
- 为什么我无法使用 == true 检查变量是否具有值
- 为什么这个对isspace()的调用永远不会返回true
- 为什么我的线段交叉测试不返回 true?
- 为什么我在图中的DFS循环检测总是返回true
- 为什么在指定-rdc=true时,cuda代码运行得慢得多