我有一个包含同一类的几个对象的向量。我试图遍历向量并将每个对象与一个给定对象进行比较,如果它们相同则返回该对象的向量中的位置。我该怎么做呢?
例如,我想在包含[foo1,foo2,foo3,foo4]
的向量中找到对象foo3答案 0 :(得分:1)
您可以重载==
运算符,然后在对象比较中使用它,就好像它们是C ++内置类型之一的项目一样:
// Overload == for myclass
bool operator==(const myclass& a, const myclass& b) {
return ...; // true if a is the same as b; false otherwise
}
现在你可以这样做:
myclass toFind = ...
std::vector<myclass> items = ...
for (int i = 0 ; i != items.size() ; i++) {
if (items[i] == toFind) {
cout << "Item is found at index " << i << endl;
}
}
您还可以使用标准C ++库中内置的其他搜索工具。正常运行的关键是==
运算符的正确重载。
答案 1 :(得分:0)
为您的班级
重载==
后使用std::find
auto it = std::find( vec.begin () , vec.end() , obj ); //eg. obj = foo3
获得职位:
int pos = -1;
if( it != vec.end() )
pos = it - vec.begin () ;
答案 2 :(得分:0)
您可以为对象重载等于运算符...因此您可以将它们作为常规内置类型进行比较。 之后,您可以使用std :: find函数
答案 3 :(得分:0)
我遇到了类似的问题,将对象/结构转换为字符列表。
参考文献:
(char*)&reference1 == (char*)&reference2
指针:
(char*)pointer1 == (char*)pointer2
它们也可以混合在一起:
(char*)pointer1 == (char*)&reference2