我目前正試圖在向量V中找到一個元素。 但我得到了很多錯誤。find_if的Lambda表達式
布爾VNS ::除去(常量主機名&名){ ^ 在文件從/usr/lib/gcc/x86_64-pc-cygwin/4.8.2/include/c++/algorithm:62:0包括, 從vns.cc:2:.....
bool VNS::remove(const HostName& name){
auto it=find_if(v.begin(),v.end(),[](const HostName& a, const HostName& b){return a==b;});
//code that will remove the elem.
if(it!=v.end()){
return true;
}else{
return false;
}
}
HeaderFile:
class VNS:public NameServerInterface{
public:
/*
* Insert a name/address pair. Does not check if the name
* or address already exists.
*/
virtual void insert(const HostName&, const IPAddress&);
/*
* Remove the pair with the specified host name. Returns true
* if the host name existed and the pair was removed, false
* otherwise.
*/
virtual bool remove(const HostName&);
/*
* Find the IP address for the specified host name. Returns
* NON_EXISTING_ADDRESS if the host name wasn't in the name
* server.
*/
virtual IPAddress lookup(const HostName&) const;
private:
std::vector<std::pair<HostName,IPAddress> > v;
};
接口:
/*
* Interface NameServerInterface -- all name server implementations must
* implement this interface.
*/
#ifndef NAME_SERVER_INTERFACE_H
#define NAME_SERVER_INTERFACE_H
#include <string>
using HostName = std::string;
using IPAddress = unsigned int;
const IPAddress NON_EXISTING_ADDRESS = 0;
class NameServerInterface {
public:
virtual ~NameServerInterface() = default;
/*
* Insert a name/address pair. Does not check if the name
* or address already exists.
*/
virtual void insert(const HostName&, const IPAddress&) = 0;
/*
* Remove the pair with the specified host name. Returns true
* if the host name existed and the pair was removed, false
* otherwise.
*/
virtual bool remove(const HostName&) = 0;
/*
* Find the IP address for the specified host name. Returns
* NON_EXISTING_ADDRESS if the host name wasn't in the name
* server.
*/
virtual IPAddress lookup(const HostName&) const = 0;
};
#endif
我拉姆達EXP有兩個參數。編譯器將如何知道如何用正確的值替換它們。
你期望'std :: find_if'作爲值傳入嗎? – chris