C++ 如果向量包含重复,则此函数应返回true。知道为什么它不是';不行吗?
我认为这很简单,但当我传递这个向量时,它返回了真值:C++ 如果向量包含重复,则此函数应返回true。知道为什么它不是';不行吗?,c++,C++,我认为这很简单,但当我传递这个向量时,它返回了真值: 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)); intarr2[]={1,6,7,89,69,23,19,100,8,2,50,3,11,90}; 向量vec2(arr2,arr2
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));
intarr2[]={1,6,7,89,69,23,19,100,8,2,50,3,11,90};
向量vec2(arr2,arr2+sizeof(arr2)/sizeof(int));
算法很简单:
(1) 实例化一个映射。
(2) 对于向量中的每个int,
(2i)如果它不在地图中,请添加它,
(2ii)如果它在映射中,则返回true。
(3) 如果为,则返回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;
}
bool包含\u重复\u 1(const std::vector&V){
std::map M;
对于(std::vector::const_迭代器it=V.begin();it!=V.end();it++){
如果(M.count(*it)!=0){
插入(std::pair(*it,true));
}否则{
返回true;
}
}
返回false;
}
此外,我也希望您能就如何更好地解决这个问题提出建议。我使用的是Apple XCode,它没有包含无序映射的库 更容易:
std::set<int> s(vec2.begin(), vec2.end());
return s.size() < vec2.size();
更容易:
std::set<int> s(vec2.begin(), vec2.end());
return s.size() < vec2.size();
在计算时间和内存方面,这会降低效率。@user2943949我添加了一个在第一次复制后出现的替代方案。由您来测试这两个选项,看看哪一个更有效。这在计算时间和内存方面效率会更低。@user2943949我添加了一个替代选项,在第一次重复之后会出现。你可以测试这两种情况,看看哪个更有效。<代码>如果它不在地图上,添加它< /C> >我认为你实际上是在与<代码>相反。如果(M.count(*it)!=0)< /Cord>许多没有代码< >无序的地图> /代码>的C++实现有一个类似的<代码> Hasymap map /Cuff>。<代码>如果它不在地图上,添加它< /C> >我认为你实际上是在与<代码>相反(如果M.count(*it)!=0)< /Cord> C++的许多实现,没有<代码> unordeDeMald有一个类似的<代码> HasyMault/Cuff>。
std::sort(V.begin(), V.end());
if (std::adjacent_find(V.begin(), V.end()) != V.end()) {
// found a duplicate
}