C++ 映射出现在C++;

C++ 映射出现在C++;,c++,C++,在下面的代码中,我总能打印出向量中某个数字的“出现次数”。如果你打印出来,你会看到,它打印的是向量元素中所有重复的数字,甚至根本没有重复 打印输出编号为: 1: 0 2: 4 5: 5

在下面的代码中,我总能打印出向量中某个数字的“出现次数”。如果你打印出来,你会看到,它打印的是向量元素中所有重复的数字,甚至根本没有重复

打印输出编号为:

1: 0                                                                       
2: 4                                                                       
5: 5                                                                       
6: 2 3                                                                     
7: 6 7 8 9                                                                 
8: 1 10 
我感兴趣的是,我总能找到向量位置[I]与打印阵列之间的差异:

cout << occurrences[6][0] - occurrences[6][1]  << endl;

cout我认为您缺少的函数是find()

假设您只想找到前两次出现之间的距离,我将您的代码更新为:

#include<iostream>
#include<vector>
#include<map>

using namespace std;

int main() {
  vector<int> ar{ 1, 8, 6, 6, 2, 5, 7, 7, 7, 7, 8 };
  map<int, vector<size_t> > occurrences;

  for (size_t i = 0; i < ar.size(); ++i) {
    auto iter = occurrences.find(ar[i]);
    if (iter == occurrences.end()) {
      occurrences[ar[i]].push_back(i);
    }
    else { //print the distance between the current and the previous occurrence
      cout << "distance with first occurrence of number "  << ar[i] << " is " << (i - iter->second[0]);
    }
  }
  return 0;
}
#包括
#包括
#包括
使用名称空间std;
int main(){
向量ar{1,8,6,6,2,5,7,7,7,8};
地图事件;
对于(大小i=0;i不欢迎使用StackOverflow。话虽如此,您的问题很难理解。您试图编写代码的问题到底是什么?请不要让我们阅读您之前的问题。假设我们需要上下文,只需开始一个问题。说明您试图解决的问题。您正在使用的输入以及预期的结果输出。定义“事件”的含义。等等。我想如果你应用了,你将能够更好地表达你的问题。大家好,我已经解决了这个问题,所以我根据你的建议更新了问题。现在让我知道是否可以?这需要以以下更清晰的解释作为序言:“我想列出一些数字在数组中出现的所有位置。例如,在数组
{1,8,6,6,2,5,7,7,7,7,7,8}
,数字
2
出现在数组索引
4
处,数字
8
出现两次,分别出现在数组索引
1
和数组索引
10
处。如果将数组中的每个唯一数字映射到它出现的索引列表,则您将拥有…(然后显示您的示例)。“那么人们可能希望理解你问题的其余部分。@zero\u字段两次或多次?然后,只需添加
if(occurrencess.second.size()==2).
(或者,
>1
).原始向量
ar
中索引的差异对应于
发生次数的差异
向量元素的差异。这很好,这是我想要的。当数字第一次出现时,我怎么能忽略取差异?我像这样试过
cout second[0])
#include<iostream>
#include<vector>
#include<map>

using namespace std;

int main() {
  vector<int> ar{ 1, 8, 6, 6, 2, 5, 7, 7, 7, 7, 8 };
  map<int, vector<size_t> > occurrences;

  for (size_t i = 0; i < ar.size(); ++i) {
    auto iter = occurrences.find(ar[i]);
    if (iter == occurrences.end()) {
      occurrences[ar[i]].push_back(i);
    }
    else { //print the distance between the current and the previous occurrence
      cout << "distance with first occurrence of number "  << ar[i] << " is " << (i - iter->second[0]);
    }
  }
  return 0;
}