Finding any element with specific first coordinate in setlt;pairgt; gt;(查找集合中具有特定第一个坐标的任何元素lt;pairgt;gt;)
问题描述
我正在尝试找出以下问题.
I'm trying to figure out the following problem.
假设我在 C++ 中有以下容器:
Suppose I have the following container in C++:
std::set<std::pair<int, int> > my_container;
这个集合(字典)按照 std::pair
上的顺序 <
排序,这是字典顺序.我的任务是在 my_container
中找到第一个坐标等于 x
的 any 元素,并将迭代器返回给它.显然,我不想使用 find_if
,因为我需要在对数时间内解决这个问题.
This set (dictionary) is sorted with respect to the order <
on std::pair<int, int>
, which is the lexicographic order. My task is to find any element in my_container
that has the first coordinate equal to, say x
, and return the iterator to it. Obviously, I don't want to use find_if
, because I need to solve this in logarithmic time.
我会很感激任何关于如何做到这一点的建议
I would appreciate any advice on how this can be done
推荐答案
你可以使用lower_bound
为此:
You can use lower_bound
for this:
auto it = my_container.lower_bound(std::make_pair(x, std::numeric_limits<int>::min());
这会给你一个迭代器到第一个元素 e
其中 e <std::pair(x, -LIMIT)
不成立.
This will give you an iterator to the first element e
for which e < std::pair(x, -LIMIT)
does not hold.
这样的元素要么具有它的第一个组件 > x
(在这种情况下,集合中没有 x
),或者具有等于 x 的第一个组件
并且是第一个这样的.(请注意,根据定义,所有第二个组件都大于或等于 std::numeric_limits<int>::min()
.
Such an element either has its first component > x
(in which case there's no x
in the set), or has the first component equal to x
and is the first such. (Note that all second components are greater than or equal to std::numeric_limits<int>::min()
by definition).
这篇关于查找集合中具有特定第一个坐标的任何元素<pair>>的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:查找集合中具有特定第一个坐标的任何元素<pair>>
基础教程推荐
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- 设计字符串本地化的最佳方法 2022-01-01
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- C++,'if' 表达式中的变量声明 2021-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31