gpt4 book ai didi

c++ - 如何只考虑 *pointer 的前两个元素

转载 作者:搜寻专家 更新时间:2023-10-31 01:24:08 25 4
gpt4 key购买 nike

从下面的代码可以看出 vector 数组有两次或更多次相同的数字。我想做的是从指针 *ptr 中找到前两个相同数字的位置

 #include<iostream> 
#include<iterator> // for iterators
#include<vector> // for vectors
using namespace std;
int main()
{
vector<int> ar = { 1,8,2, 2, 2, 5,7,7,7,7,8 };

// Declaring iterator to a vector
vector<int>::iterator ptr;

// Displaying vector elements using begin() and end()
cout << "The vector elements are : ";
for (ptr = ar.begin(); ptr < ar.end(); ptr++)
cout << *ptr << " ";
return 0;
}

假设我想通过取消引用指针 *ptr 来打印出 7 的前两个位置和元素。我应该使用 if 条件吗?

int *array = ptr.data(); 
for( int i =0; i < ar.size(); i++) {

if( array[i] - array[i+1]+ ==0)
cout<<array[i]<<endl;

但我如何保证它不是从 *ptr 中寻找唯一的前两个相同元素?

更新

清除问题:

  1. 我一直想通过解引用指针知道同一个元素的第一个和第二个位置的原因是以后我会做一些研究,并且在那个研究中,我会有一些时间与第一个和第二个相关联相同编号的位置。问题是,我想忽略第二次后仍然重复的相同元素,因为我想在计算中忽略这些元素位置。
  2. 例如,如果您打印出代码,您会发现元素:** vector 元素为 1 8 2 2 2 5 7 7 7 7 8 **。在这种情况下,元素 2 的前两个位置是 [2] 和 [3],因此我想忽略位置 [4]。另一件事要提到的是,我不关心值或结果是否如此[我的意思是例如 828 或 888,我会考虑两者]。例如,数字 8 在位置数组 [1] 中,在 [10] 中。我也会考虑这个。

最佳答案

创建一个映射,其中每个值都存储为键,映射到索引列表:

std::unordered_map<int, std::vector<size_t>> indexMap;

遍历您的初始值并填充 map :

for (size_t index = 0; index < ar.size(); index++)
{
indexMap[ar[index]].push_back(index);
}

现在您可以遍历您的 map 并处理每个具有 2 个或更多索引的值,并且只使用前 2 个索引来做任何您想做的事情:

for (auto const& [value, indices] : indexMap)
{
if (indices.size() < 2)
continue;

size_t firstIndex = indices[0];
size_t secondIndex = indices[1];

// do whatever
}

(如果您不使用 C++17 或更高版本,请使用 for (auto const& pair : indexMap),其中 pair.firstvaluepair.secondindices。)

关于c++ - 如何只考虑 *pointer 的前两个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58474149/

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