如何在c ++中找到vector2中vector1的索引

时间:2015-10-08 15:28:11

标签: c++

我正在讨论这个问题大约一周,我有两个向量,例如vec1和vec2,我想在搜索后找到vec2中vec1的值,返回它们的索引,例如:

vector<int>vec2 = { 1, 2, 2, 4 };
vector<int>vec1 = { 1, 2, 4 };

我想要像这样的伪代码和这个结果: 伪代码:

for i = 0 to vec2.size() do
return   vec1 indexes in vec2;
end

结果:

PASS1:

1     0     0     0

PASS2:

0     1     1     0

PASS3:

0     0     0     1

最后的决赛:

0     0     0     1

我的代码(不编译):

我的代码:

#include <vector>
#include <iostream>
using namespace std;

vector<int> find_index(vector<int>vec2, vector<int>vec1)
{
    std::vector<double> tmp;
    for (int i = 0; i<vec2.size(); i++)
    {
        for (int j = 0; j<vec2.size(); j++)
        {
            if (vec2[i] == vec1[j])
            {
                tmp.push_back(i);
            }
        }
    }
    return tmp;
}

int main()
{
    vector<int>vec2 = { 1, 2, 2, 4 };
    vector<int>vec1 = { 1, 2, 4 };
    cout << find_index(vec2, vec1);
    getchar();
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您编写的代码无法编译,原因有两个:

  • double向量使用tmp项类型。 vector<double>不会隐式转换为所需的函数结果类型vector<int>

  • 标准库没有定义向量的输出,因此cout <<中的main 向量不会编译。

    < / LI>

要输出矢量,您可以定义如下函数:

void write_to( ostream& stream, vector<int> const& v )
{
    for( int i = 0; i < int( v.size() ); ++i )
    {
        stream << (i > 0? " " : "") << v[i];
    }
}

并将其称为:

write_to( cout, find_index(vec2, vec1) );
cout << "\n";

也可以编写一些能够启用cout <<符号的胶水代码,即可以使用write_to函数,但这可能只是现在的并发症。 / p>

通过这些更改,您的代码可以编译和输出

0 1 2 3