我使用C++進行編碼。我有一個有很多文件的項目。我有一個名爲列表對的向量如下:如果一個元素存在於一個對的向量中,則在該類的內部找到
std::vector< std::pair< structure1, double> > list;
,我要檢查是否爲特定的雙重價值z
,存在一個元素:el
列表這樣的:el.second == z
我想要使用find_if
爲此,我實現了一個方法:Scheduled
,它有兩個參數:第一個是存儲在列表中的元素,第二個是要查找的特定值。 我嘗試了幾種方法,但我最終得到一個錯誤總是 1路:裏面的另一種方法,但仍然在同一類
bool classA::Scheduled(std::pair< structure1,double > const el, double const t)
{
return el.second==t;
}
:CLASSA
auto Scheduled1 = std::bind(&classA::Scheduled,this,_1,z);
bool call=std::find_if(list.begin(),list.end(),Scheduled1)=!list.end();
該解決方案提供了以下錯誤:
error: ‘Scheduled1’ does not name a type
第二個辦法: 直接使用lambda
bool call = std::find_if(list.begin(),list.end(),[this](std::pair<struct1,double> const& el){return el.second==z;})!=list.end();
z是CLASSA 該編碼的第二方式的成員變量產生了這樣的錯誤:
error: no matching function for call to
「find_if(標準::矢量>:迭代,性病::矢量> ::迭代器,classA :: method1(int):: __ lambda0)'
從STD返回類型::綁定不一個成員函數,Scheduled1命名一個值,而不是一個類型。 –
爲了記錄,你正在做的是[currying]的形式(http://en.wikipedia.org/wiki/Currying)(可能會在某些情況下使用該名稱更容易搜索它)。 –
對不起,但如果你需要更多的幫助,你將不得不做得更好。在你添加的代碼中有幾個錯誤,除非你可以發佈有效的代碼,否則我不再嘗試。 '&ClassA :: IsItScheduled' - 'classA'中的'c'現在是大寫的? IsItScheduled是什麼? '... Scheduled1)=!list.end();' - '=!'顯然是不正確的。在lambda示例中,'find_if'的結果不能轉換爲'bool',因此您需要將其與另一個示例中的end iterator進行比較。請創建一個可以複製粘貼的測試用例,並重現錯誤。請參閱[SSCCE](http://sscce.org) – Praetorian