问题描述
我想知道是否有办法比较多集迭代器?我有兴趣做以下事情:
std::multiset<int> mt{1,1,3,4,5};
auto it1 = mt.find(3);
auto it2 = mt.find(1);
cout << (it1 < it2) << endl; // this should print "0"
it1 = mt.find(equal_range);
auto p = mt.equal_range(1);
cout << (p.first < p.second) << endl; // this should print "1"
但是我无法在多集迭代器上使用比较运算符。
如果集合中的值是唯一的,我可以只比较迭代器的解引用版本,但我特别使用多重集,因为值可能不是唯一的,并且如果 2 个迭代器指向相同值的不同实例,我需要一种方法来根据它们在底层树中的相对位置来比较它们。
解决方法
有没有办法比较多集迭代器?
没有有序的比较。双向迭代器通常不要求/保证不具有可比性。
您面临的问题本质上与找出链表中元素的顺序相同。线性复杂度算法是可能的:
std::distance(std::begin(mt),it1) < std::distance(std::begin(mt),it2)
相等的比较是微不足道的。
,没有。但是,您可以使用 C++ STL PBDS 中的有序集在多重集中找到元素的顺序。