c++ - find_if 和 std::pair,但只有一个元素

标签 c++ vector lambda iterator 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 */

现在我只需要在其中搜索一个 int 元素,所以:

vectorIt = std::find_if(myVec.begin(),myVect.end(),make_pair(.....));
                                                   ^^^^^^^^^^^^^^^^^

我该怎么做?

最佳答案

编写一个接受 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_;
};

然后

// find first element with first == 42
vectorIt = std::find_if(myVec.begin(),myVect.end(), CompareFirst(42));

关于c++ - find_if 和 std::pair,但只有一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12008059/

相关文章:

c++ - 如何消除对幂等函数的额外调用?

c++ - 异常与 errno

c++ - 为什么 cout 在代码块上没有产生输出?

c++ - 旧 vector 是否被清除?如果是,如何以及何时?

c++ - 推导除一个模板参数外的所有参数?

c++ - 与观察者指针共享指针

c++ - 将整个文件读入线 vector 的最有效方法

c# - 如何在 LINQ 查询中放置条件 WHERE 子句

python - Lambda 函数无法正常工作

java - 在 gs-uploading-files Spring Boot 示例上将 Java 1.8 lambda 转换为 Java 1.7