如何根据第一个元素在对的 unordered_set 中搜索元素>

0 c++ algorithm unordered-set data-structures

unordered_set<pair<int, int> s;
Run Code Online (Sandbox Code Playgroud)

我想执行s.find()操作,但我不知道如何根据第一个元素来实现它。

eg, if my set is: (3,4),(2,5),(5,6),(7,8)

我想找到第一个元素是 7 的第二个元素,我该怎么做。

use*_*522 6

 std::find_if(s.begin(), s.end(), [](auto& el){ return el.first == 7; })
Run Code Online (Sandbox Code Playgroud)

或使用 C++20:

 std::ranges::find_if(s, [](auto& el){ return el.first == 7; })
Run Code Online (Sandbox Code Playgroud)

(两者都需要#include<algorithm>。)

如果没有找到这样的元素,这将返回一个迭代器到包含7在该对的第一个位置的元素。s.end()

然而,这很麻烦,并且时间复杂度与容器的大小呈线性关系。如果您需要经常进行此搜索,您可能应该使用

std::unordered_map<int, int>
Run Code Online (Sandbox Code Playgroud)

或者

std::unordered_multimap<int, int>
Run Code Online (Sandbox Code Playgroud)

相反(取决于第一个元素是否可以多次具有相同的值)。

然后就很简单了

s.find(7)
Run Code Online (Sandbox Code Playgroud)