使用 std::find 在 std::pair 的向量中查找元素

using std::find to find elements in vector of std::pair

有没有办法在 std::pairstd::vector 中使用 std::find? 我想查看对的第一个成员并仅在对的第一个成员中搜索给定值。 当然,我可以用 for 循环明确地做到这一点,但我可以用更优雅的方式做到这一点吗?
(如果重要的话,我正在使用 c++14)

这是一个使用 std::find_if

的示例
include <iostream>
#include <vector>
#include <utility>

int main()
{
    std::vector<std::pair<char, char>> v {
        std::make_pair('a', 'A'),
        std::make_pair('b', 'B'),
        std::make_pair('c', 'C')
    };
    auto it = std::find_if(
            v.begin(),
            v.end(),
            [](const auto& item) {
                return std::get<0>(item) == 'b';
            }
        );
    if (it != v.end()) {
        // found!
        std::cout << std::get<1>(*it) << std::endl;
    }
    else {
        std::cout << "Not found" << std::endl;
    }
}

我知道您使用的是 c++14,但总有一天(希望很快),您将能够使用 c++20,它具有 range-ified 允许您使用投影的算法。

所以如果你有一个向量对:

std::vector<std::pair<int, int>> v { {1,2}, {2,3}, {3,4} };

您可以 find pairfirst 成员等于这样的值:

auto f = std::ranges::find(v, 2, &std::pair<int, int>::first);

或者您可以 find_if pairfirst 成员满足某些谓词,如下所示:

auto is_even = [](auto i) { return i % 2 == 0; };

auto f = std::ranges::find_if(v, is_even, &std::pair<int, int>::first);

这几乎是它可能达到的最优雅的状态,因为代码现在实际上没有任何可降低的复杂性。

这里是 demo