有没有办法比较多集迭代器?

问题描述

我想知道是否有办法比较多集迭代器?我有兴趣做以下事情:

    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 中的有序集在多重集中找到元素的顺序。