【问题标题】:How to find if a set of type pair contains an element as the second member?如何查找一组类型对是否包含一个元素作为第二个成员?
【发布时间】:2017-03-25 02:32:11
【问题描述】:

如果我有一组以下类型:

std::set<std::pair<double,unsigned> > X;

我想找到unsigned y 第一次出现的位置,这将是std::set X 中的第二个成员。

我怎样才能有效地做到这一点?

TIA

【问题讨论】:

  • 鉴于集合是无序的,在这种情况下,“第一”和“第二”是什么意思?
  • 在我的集合中,第一个成员是 double 类型,第二个成员是 unsigned 类型
  • 所以你想找到一个集合项,它的.second项与其他一些无符号值相同?
  • 是的,这就是我想要做的

标签: c++ stl set std-pair


【解决方案1】:

您可以将std::find_if 与谓词一起使用。

int main() {
  std::set<std::pair<double,unsigned>> X { {1.1, 1}, {2.2, 2}, {3.3, 3} };
  unsigned valToSearch = 2;

  // the searah method with predicate:
  auto it = std::find_if(X.begin(), X.end(),
     [valToSearch](const std::pair<double,unsigned>& elem) {return elem.second == valToSearch;});

  if(it != X.end())
    std::cout << it->first << ", " << it->second;

  return 0;
}

输出

2.2, 2

【讨论】:

  • 感谢您的回复。我不确定cbegin和cend是什么意思。如果我想遍历整个 X 集合,并且想找出 unsigned y 这是否是正确的方法:auto it = std::find_if(x.begin(), X.end(), [y](const auto& elem) { return elem.second == y; }
  • 如果我这样做,我会收到一条错误消息“无法解析第二个标识符”
猜你喜欢
  • 1970-01-01
  • 2014-06-04
  • 2017-08-04
  • 1970-01-01
  • 2021-03-03
  • 2022-11-16
  • 2021-12-30
  • 2018-06-12
相关资源
最近更新 更多