Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为向量中的相同值获取索引数组? 我是C++初学者,遇到了问题。_C++_Arrays - Fatal编程技术网

如何为向量中的相同值获取索引数组? 我是C++初学者,遇到了问题。

如何为向量中的相同值获取索引数组? 我是C++初学者,遇到了问题。,c++,arrays,C++,Arrays,假设有一个整数向量,我们如何得到相同值的索引数组 i、 e.如果向量是:[a,a,b,c,a,c,b,c],其中a,b,c是整数 那么预期的索引数组应该是: v_a=[1,2,5],v_b=[3,7],v_c=[4,6,8] < C++ >有没有实现C++的简单方法?首先,你需要考虑C++中的(如C语言和java语言以及许多其他语言),数组和vector的索引在0开始。N尺寸表示N-1个位置。例如:一个包含3个元素的向量/数组,从索引0到索引2 在您的示例中:v_a=[0,1,4],v_b=[2

假设有一个整数向量,我们如何得到相同值的索引数组

i、 e.如果向量是:[a,a,b,c,a,c,b,c],其中a,b,c是整数

那么预期的索引数组应该是:

v_a=[1,2,5],v_b=[3,7],v_c=[4,6,8]


< C++ >有没有实现C++的简单方法?

首先,你需要考虑C++中的(如C语言和java语言以及许多其他语言),数组和vector的索引在0开始。N尺寸表示N-1个位置。例如:一个包含3个元素的向量/数组,从索引0到索引2

在您的示例中:v_a=[0,1,4],v_b=[2,6],v_c=[3,5,7]

int a, b, c;
vector<int> integers;
vector<int> v_a;
vector<int> v_b;
vector<int> v_c;

void indexes(){
  for(int i = 0; i < integers.size(); i++){

    if( integers[i] == a )
      v_a.push_back(i);
    else if( integers[i] == b )
      v_b.push_back(i);
    else if( integers[i] == c )
      v_c.push_back(i);
  }
}
inta、b、c;
向量整数;
向量v_a;
向量v_b;
向量v_c;
无效索引(){
对于(int i=0;i

这就是你问题的解决办法。既然你正在学习C++,你可能想采用这个解决方案,并试图使它更通用。

在我看来,最好使用<代码> STD::MultIMAP ,因为原始数组中的不同整数的数目是未知的,我理解的可以改变。 这是一个演示程序

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

int main( void )
{
    std::vector<char> v = { 'a', 'a', 'b', 'c', 'a', 'c', 'b', 'c' };
    std::multimap<char, size_t> m;

    for ( size_t i = 0; i < v.size(); i++ ) m.insert( { v[i], i } );

    for ( auto it = m.begin(); it != m.end(); )
    {
        auto p = m.equal_range( it->first );

        while ( p.first != p.second )
        {            
            std::cout << p.first++->second << ' ';
        }
        std::cout << std::endl;

        it = p.second;
    }        
}    

考虑到数组索引从C++中的0开始。

你尝试了什么吗?这是一个基本的迭代算法,你可以自己轻松地做。@ OliverCharlesworth感谢你的回复。我尝试了一些方法:通过比较向量中的元素和第一个元素的值,我们得到第一个值的索引数组。但我不知道如何检查第二个值的位置。这不是教程网站或代码编写服务。非常感谢您的回答!但我的问题中遗漏了一点。我不知道向量中会出现多少个整数。i、 可能只有a、b和c,但可能有a、b、c和d。这种情况怎么样?所以你需要保留一个额外的向量来跟踪你是否已经看到int。我会更改密码,给我2分钟。好的,看看莫斯科的@Vlad回复。他比我快得多。尽管如此,还是谢谢你的回答和好意@米格尔·库纳汉克斯:谢谢你的回答!我想知道这是否意味着要使用上面的解决方案,我们需要将向量从整数转换为字符?@XhivaW用字符替换int就足够了。我使用字符是因为您使用了符号a、b、c等等。再次感谢您的回答和好意。我会尽力理解这一点,看看是否可以在本地运行它@来自莫斯科的弗拉德很抱歉打扰你。但是“it”和“p”的定义似乎与c++98不兼容,因为当我编译这个时没有“-std=c++11”,出现了“error:“it”没有命名类型”和“error:“it”没有在这个范围内声明”。有没有办法在c++98中定义@Vlad@XhivaW在C++ 98中,必须显式声明它,例如:STD::MultIMA::Idter。p的声明也应如此。
0 1 4 
2 6 
3 5 7