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
}