我有以下一套:
auto comp = [](const vector<int>& a, const vector<int>& b) -> bool
{ return a.size() < b.size(); };
auto path = std::set <vector<int>, decltype(comp)> (comp);
当我尝试从设置任务中获取第一个元素时
tasks.begin() this will return an iterator of the set
当我再次尝试访问集合的向量时:
tasks.begin()->begin() this will only return an iterator of the vector.
如何在中间没有任何迭代器的情况下获取集合的第一个元素?
答案 0 :(得分:1)
你做不到。访问std::set
中元素的唯一方法是通过以下方法:begin,end,cbegin,cend,rbegin,rend,crbegin,crend,insert,emplace,emplace_hint,erase,find,equal_range,lower_bound和upper_bound 。它们中的每一个都返回一个迭代器,一对迭代器或一对迭代器和一个bool。
答案 1 :(得分:1)
我不确定你要做什么,但这是滥用比较器。以下是requirements on a compare type T
:
类型
T
满足比较
- 类型
T
满足BinaryPredicate和鉴于
- 类型的对象
comp
,Compare- 的表达式
equiv(a, b)
,一个等同于!comp(a, b) && !comp(b, a)
如果您的功能没有检查这两个并且相对于彼此返回的订单,则违反此合同并且结果将是未定义的。