set<pair<int,int> >s;
pair<int,int>a0 = make_pair(1,10); // pair is kind of range of integer
air<int,int>a1 = make_pair(11,50);
s.insert(a0);
s.insert(a1);
今、私はセット内の任意のペアの範囲内にある整数を検索するときにtrueを返す関数が必要です。ペアのペアの間にある要素をペアでどのように見つけるか?
set<pair<int,int> >s;
pair<int,int>a0 = make_pair(1,10); // pair is kind of range of integer
air<int,int>a1 = make_pair(11,50);
s.insert(a0);
s.insert(a1);
今、私はセット内の任意のペアの範囲内にある整数を検索するときにtrueを返す関数が必要です。ペアのペアの間にある要素をペアでどのように見つけるか?
内の各ペアであるかどうかを確認今、私は私が検索したときにtrueを返す関数が必要セット内の任意の対の範囲内にある任意の整数。
はstd::any_of()
(オート&P:S)のための
#include <set>
#include <utility>
#include <iostream>
#include <algorithm>
bool anyRange (std::set<std::pair<int, int>> const & s, int v)
{ return std::any_of(s.cbegin(), s.cend(),
[&](std::pair<int, int> const & p)
{ return (p.first <= v) && (v <= p.second); }); }
int main()
{
std::set<std::pair<int, int>> s { {1, 10}, {11, 50} };
std::cout << anyRange(s, -5) << std::endl; // print 0
std::cout << anyRange(s, 5) << std::endl; // print 1
std::cout << anyRange(s, 25) << std::endl; // print 1
std::cout << anyRange(s, 75) << std::endl; // print 0
}
高速検索が必要な場合(つまり線形より優れている場合)は、interval treeを使用してください。 std ::セットは、セットの上に、この問題
この情報はありがとうございました。 – theandroid
反復に適していないと整数がセット
bool bet(set<pair<int,int> > s, int integer)
{
for (auto it : s)
{
if (it.first <= integer && it.second >= integer)
return true;
}
return false;
}
これはおそらく動作しますが、コンテナが 'set'(つまり要素がソートされている)という事実を使用しません。コードは 'vector'と同じです。 – 4386427
'のための作業と思われる(p.first <= xと&& p.second> = x)がtrueを返す場合は、{。 if(p.first> x)break; }あなたがそれらをセットに入れているという事実は、本当にあまり助けにはなりません(ただし、最初のコンポーネントが大きくなり過ぎると早期に停止することはできません)。 –
何を試しましたか?これまでに何を持っていますか? – GigaRohan
他のデータ構造を使用してこれよりもこの作業を行うことはできますか? – theandroid