int値iを囲むすべての範囲[a、b]を見つけようとしています。ここで、a <= i<=bです。set<std:pair<int,int>>
範囲のセットに使用しています。
以下では、yieldで等しい範囲を使用すると、範囲vector<int>
の開始と終了を1つ過ぎた結果になります。
について同じことを行うとset<pair<int,int>>
、結果は範囲の終わりを過ぎた時点で開始および終了するため、値を囲む範囲は含まれません。
#include <set>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int ia[] = {1,2,3,4,5,6,7,8,9,10};
set<int> s1(begin(ia),end(ia));
auto range1 = s1.equal_range(5);
cout << *range1.first << " " << *range1.second << endl; //prints 5 6
pair<int,int> p[] = {make_pair(1,10),
make_pair(11,20),
make_pair(21,30),
make_pair(31,40)};
set<pair<int,int>> s(begin(p), end(p));
auto range = s.equal_range(make_pair(12,12));
cout << range.first->first << " " << range.first->second << endl; //prints 21 30, why?
cout << range.second->first << " " << range.second->second << endl; //prints 21 30
}
prints
5 6
21 30
21 30
set<pair<int,int>>
値(12)を囲む範囲、つまり[11.20]
がequal_rangeに含まれないのはなぜですか。