我的目标是将 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)!
- 对 vector 进行排序
- 遍历排序后的 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/