我試圖找到所有的範圍[a,b],其中包含int值i,其中< = i < = b。我正在使用set<std:pair<int,int>>
作爲一組範圍。std :: set :: equal_range std :: pair的容器
下面,在vector<int>
上使用相同的範圍會得到該範圍的開始值和結束值。
當我對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>>
equal_range不包括包圍所述值(12),即[11.20]
如果不相等範圍內使用相同的'少>'用於定義集合的默認比較器?在這種情況下,包含12的範圍返回'true',因爲[11,20] <[12,12] –
hhbilly
對,現在就明白了。謝謝。 – hhbilly
我想查找包含值的大集合中的所有範圍。除了使用set成員,我可以使用find_if算法和lambda來測試機箱,但這並不意味着我需要測試集合中的所有元素(以百萬爲單位)? – hhbilly