c++ - 将 vector 拆分为唯一和重复 C++

标签 c++ algorithm sorting split unique

我的目标是将 vector 分成两部分:具有唯一值和重复项。

例如我有 sorted vector myVec=(1,1,3,4,4,7,7,8,9,9) 应该拆分到 myVecDuplicates=(1,7,4,9)myVecUnique=(1,4,7,9,3,8). 所以 myVecDuplicates 包含所有具有的值重复,而 myVecUnique 包含所有值,但在单个实现例中。

顺序无关紧要。我的想法是使用 unique,因为它将一个 vector 分成两部分。但是我在运行我的代码时遇到了问题。

vector<int> myVec(8)={1,1,3,4,4,7,8,9};
vector<int>::iterator firstDuplicate=unique(myVec.begin(),myVec.end());
vector<int> myVecDuplicate=myVec(firstDuplicate,myVec.end());\\here error accures that says ' no match for call to '(std::vector<int>) (std::vector<int>::iterator&, std::vector<int>::iterator)'
vector<int> myVecUnique=myVec(myVec.begin()+firstDuplicate-1,myVec.end());

运行此代码后,我收到一条错误消息(第 2 行)'不匹配调用 '(std::vector) (std::vector::iterator&, std::vector::iterator)'

请帮助我理解错误的根源,或者建议一些更优雅、更快速的方法来解决我的问题(没有哈希表)!

最佳答案

啊..你的问题中的编辑太多了,任何人都不喜欢。通过使用 map 保持简单。

在 C++ 中,map 在存储unique + sorted + respective_count 值方面非常方便。

map<int, int> m;
for(auto &t : myVec){
    m[t]++;
}
vector<int> myVecDuplicate, myVecUnique;
for(map<int, int>::iterator it = m.begin(); it != m.end(); it++){
    if(it->second > 1) myVecDuplicate.push_back(it->first);
    myVecUnique.push_back(it->first);
}

编辑:

maybe suggest some more elegant and fast way to solve my problem (without hash tables)!

  1. 对 vector 进行排序
  2. 遍历排序后的 vector ,

  if (current_value == previous_value){
    if(previous_value != previous_previous_value)
     myVecDuplicate.push_back(current_value);
  }
  else{
      myVecUnique.push_back(current_value);
  }

首先,初始化 previous_value = current_value - 1 previous_previous_value 为 current_value - 2。

关于c++ - 将 vector 拆分为唯一和重复 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40466502/

相关文章:

c++ - 如何将值输出到 C++11 中的流元组

arrays - 对 n 元素数组进行排序,使前 k 个元素按升序排列最低(就地算法)

java - 为什么 QuickSort 使用 O(log(n)) 额外空间?

c - 按长度排序,在 c 中具有稳定性

javascript - 使用 d3.js 迭代多维数组

Java数组逆序排序!需要反向反转

c++ - 返回值存储在哪里?

c++ - 与 MinGW (v.4.3.0) 和 libhid 的链接问题

c++ - 如何解决此阻塞问题?

ruby-on-rails - rails : How to conditionally apply ActiveRecord sorting by one attribute based on through association or other property