gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:21:59 26 4
gpt4 key购买 nike

我的目标是将 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 - 1previous_previous_value 为 current_value - 2。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com