如何解决有没有办法比较多集迭代器?
我想知道是否有办法比较多集迭代器?我有兴趣做以下事情:
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 中的有序集在多重集中找到元素的顺序。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。