gpt4 book ai didi

c++ - 如何找到 vector 中的元素?

转载 作者:太空宇宙 更新时间:2023-11-04 15:48:16 26 4
gpt4 key购买 nike

我定义了一个结构 Coord 为

struct Coord { 
int x;
int y;
int z;
};

重载运算符!= 坐标

bool Coord::operator !=(Coord& crd)const {
if(this->x != crd.x)
{
if(this->y != crd.y)
{
if(this->z != crd.z)
return true;
else
return false;
}
else
return false;
return true;
}
else
return false;
}

然后初始化一个vector变量为

vector<Coord> vcoord;

现在我使用下面的代码来获取具有特定 Coord 对象的 vector 的索引

int Index::getVIndex(Coord crd) { 
vector<Coord>::iterator it;
int indx;

it = vcoord.begin();
while(it != vcoord.end() && (*it) != crd)
++it;

indx = distance(vcoord.begin(),it);
cerr << (*it).x << " " << (*it).y << " " << indx << endl;
return indx;
}

但 indx 的值始终为 0。请帮助获得正确的结果。

最佳答案

您的 Coord 需要一个不等于运算符结构以便能够做到这一点:

(*it) != crd

<罢工>

您的不等于运算符的逻辑不正确。最好和最简单的选择是提供相等比较并使用 std::find :

struct Coord { 
int x;
int y;
int z;
};

bool operator == (const Coord& lhs, const Coord& rhs)
{
return lhs.x==rhs.x && lhs.y==rhs.y && lhs.z==rhs.z;
}

然后您可以实现 !=== 方面, 但如果使用 std::find 则不需要它,它使用 ==默认情况下:

vector<Coord>::iterator it = std::find(vcoord.begin(), vcoord.end(), crd);

关于c++ - 如何找到 vector 中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13121827/

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