Per*_*ulf 6 c++ lambda iterator vector std-pair
假设我有以下代码:
std::vector< std::pair <int, char> > myVec;
or
std::list< std::pair <int, char> > myList;
/* then ***************/
std::list< std::pair <int, char> >::iterator listIt;
or
std::vector< std::pair <int, char> >::iterator vectorIt;
/* No difference between vector and list */
Run Code Online (Sandbox Code Playgroud)
现在我需要搜索其中的一个int元素,所以:
vectorIt = std::find_if(myVec.begin(),myVect.end(),make_pair(.....));
^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
jua*_*nza 14
写一个带有a的一元谓词,std::pair如果该first元素等于给定值,则返回true .
例如:
struct CompareFirst
{
CompareFirst(int val) : val_(val) {}
bool operator()(const std::pair<int,char>& elem) const {
return val_ == elem.first;
}
private:
int val_;
};
Run Code Online (Sandbox Code Playgroud)
然后
// find first element with first == 42
vectorIt = std::find_if(myVec.begin(),myVect.end(), CompareFirst(42));
Run Code Online (Sandbox Code Playgroud)
Tem*_*Rex 13
这使用C++ 11 lambda表达式,并给出value你想要找到的:
std::find_if(container.begin(), container.end(),
[&value](std::pair<int, char> const& elem) {
return elem.first == value;
});
Run Code Online (Sandbox Code Playgroud)
其中container或者是myVec或myList.
lambda表达式[&value](...){...}是临时表达式的功能等价(很像你可以将"3 + 2"作为参数传递给int 参数.它将被编译器转换为函数对象(很像juanchopanza的答案).它可以帮助您避免键入并保持代码本地化.
| 归档时间: |
|
| 查看次数: |
9883 次 |
| 最近记录: |