相关疑难解决方法(0)

确定无序向量<T>是否具有所有唯一元素

分析我的cpu绑定代码表明我花了很长时间检查容器是否包含完全唯一的元素.假设我有一些未分类元素的大容器(有<=定义),我有两个关于如何做到这一点的想法:

第一个使用一组:

template <class T>
bool is_unique(vector<T> X) {
  set<T> Y(X.begin(), X.end());
  return X.size() == Y.size();
}
Run Code Online (Sandbox Code Playgroud)

第二个循环元素:

template <class T>
bool is_unique2(vector<T> X) {
  typename vector<T>::iterator i,j;
  for(i=X.begin();i!=X.end();++i) {
    for(j=i+1;j!=X.end();++j) {
      if(*i == *j) return 0;
    }
  }
  return 1;
}
Run Code Online (Sandbox Code Playgroud)

我已经尽我所能测试了它们,而且从阅读有关STL的文档中我可以收集到的,答案是(像往常一样),这取决于.我认为在第一种情况下,如果所有元素都是唯一的,那么它非常快,但如果存在大的简并性,则操作似乎需要O(N ^ 2)时间.对于嵌套迭代器方法,相反似乎是正确的,X[0]==X[1]如果所有元素都是唯一的,则可以快速点亮,但是(如果可以理解)O(N ^ 2)时间.

有没有更好的方法来做到这一点,也许是为此目的而构建的STL算法?如果没有,有什么建议可以提高效率吗?

c++ algorithm stl unique

37
推荐指数
5
解决办法
1万
查看次数

检查向量中的重复项

可能重复:
确定无序向量<T>是否具有所有唯一元素

我必须检查一个矢量的重复.解决这个问题的最佳方法是什么:

我拿第一个元素,将它与向量中的所有其他元素进行比较.然后采取下一个元素并执行相同的操作,依此类推.

这是最好的方法,还是有更有效的方法来检查重复?

c++

17
推荐指数
2
解决办法
5万
查看次数

检查std :: vector有重复项

我想检查一个整数向量是否有任何重复,如果有,则必须返回true.所以我尝试做这样的事情:

vector<int> uGuess = {1,2,3,3,4,5}
vector<int> a = uGuess;
sort(a.begin(), a.end());
bool d = unique(a.begin(), a.end());
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为unqiue不能被指定为bool值.我该怎么办呢?如果我要写一个for循环来执行相同的操作,我该怎么做?

c++ algorithm for-loop vector duplicates

7
推荐指数
3
解决办法
6829
查看次数

标签 统计

c++ ×3

algorithm ×2

duplicates ×1

for-loop ×1

stl ×1

unique ×1

vector ×1