2016-05-21 73 views
0

我想在C++中使用STL實現一個函數,該函數需要一個對象和一個對象向量,如果向量包含對象,則返回true,否則返回false。下面是該函數的實現:我試圖做一個函數,如果一個元素在向量中但返回錯誤,則返回true/false?

bool belongs(vertex V, std::vector<vertex> &array) 
{ 
    std::vector<vertex>::iterator it; 
    it = find(array.begin(), array.end(), V); 
    if(it != array.end()) 
    { 
    return true; 
    } 
    else 
    { 
    return false; 
    } 
} 

不過,我得到這個錯誤:

invalid operands to binary expression ('vertex' and 'const vertex') 
     if (*__first == __value_) 

我能做些什麼?我對使用面向對象編程的STL進行編程有點新,所以您的幫助正在等待。

回答

2

主要問題是沒有爲頂點類型定義的operator==(其中find爲了確定是否有2個vertex實例是相同的)。您可以如下定義一個:

#include <iomanip> 
#include <iostream> 
#include <vector> 
#include <algorithm> 

struct vertex 
{ 
    float a, b; 
    bool operator==(const vertex& o) const // <-- This method is what find is looking for 
    { 
     return a == o.a && b == o.b; 
    } 
}; 

bool belongs(vertex V, const std::vector<vertex>& array) 
{ 
    return find(array.begin(), array.end(), V) != array.end(); 
} 

int main() 
{ 
    std::vector<vertex> v = { { 1, 2 }, { 3, 4 } }; 
    std::cout << std::boolalpha << belongs({ 4, 5 }, v); 
    return 0; 
} 

Live on Coliru

我也縮短了執行的屬於,其更清楚到:

return x; 

而不是:

if (x) 
    return true; 
else 
    return false; 
+0

我做了一個頂點類,那麼我應該怎麼做呢? –

+0

@DanishAmjadAlvi實現運算符==爲它,我沒有你的頂點類,所以我做了一個。 – Borgleader

+0

明白了!我認爲它工作!感謝您的幫助! –

相關問題